Поиск:

Ответ в темуСоздание новой темы Создание опроса
> delete this 
:(
    Опции темы
maq
  Дата 7.8.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 28.10.2005

Репутация: нет
Всего: нет



У меня 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)
PM MAIL   Вверх
Earnest
Дата 7.8.2008, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



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


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0631 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.