Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > delete this


Автор: maq 7.8.2008, 12:18
У меня MDI приложение. Зарегистрированы несколько шаблонов.
Один из них:
Код
AddDocTemplate(new RMultiDocTemplate(ID_DOC_REPORT,
    RUNTIME_CLASS(DDocument),  //  свой класс
    RUNTIME_CLASS(CMDIChildWnd),
    RUNTIME_CLASS(CEditView)));

Если я зарываю это окно открытое этим шаблоном, у меня выскакивает ошибка “HEAP CORRUPTION DETECTED: … CRT detected that the application wrote to memory after end of heap buffer”

Ошибка вызывается только при закрытии этого шаблона в 

Код
void CDocument::OnCloseDocument()
    // must close all views now (no prompting) - usually destroys this
{
    // destroy all frames viewing this document
    // the last destroy may destroy us
    BOOL bAutoDelete = m_bAutoDelete;
    m_bAutoDelete = FALSE;  // don't destroy document while closing views
    while (!m_viewList.IsEmpty())
    {
        // get frame attached to the view
        CView* pView = (CView*)m_viewList.GetHead();
        ASSERT_VALID(pView);
        CFrameWnd* pFrame = pView->EnsureParentFrame();

        // and close it
        PreCloseFrame(pFrame);
        pFrame->DestroyWindow();
            // will destroy the view as well
    }
    m_bAutoDelete = bAutoDelete;

    // clean up contents of document before destroying the document itself
    DeleteContents();

    // delete the document if necessary
    if (m_bAutoDelete)
        delete this; // ЗДЕСЬ ВЫСКАКИВАЕТ ОШИБКА
}

Документ открыт 1 раз и только в этом окне (1 фраме – 1 view)

Автор: Earnest 7.8.2008, 12:48
Проверь, что документ не удаляется дважды, а также, что после delete this никто к нему не обращается.
Очень похоже на то, что к моменту вызова // ЗДЕСЬ ВЫСКАКИВАЕТ ОШИБКА документ уже грохнули (поставиь точку прерывания на деструктор). 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)