Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CRT Debugger & WTL, _CrtDumpMemoryLeaks() выдает утечки! 
:(
    Опции темы
zhekha
Дата 8.8.2007, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Написал приложение отображающее диалоговое окошко, попробовал проверить на утечки памяти и вот, что не понравилось дебагеру: без одной строчки нижеприведенный код не имеет утечек памяти, а при ее добавлении появляется 4 байта утечки! Может фильтр сообщений нужно еще как-то удалить?

Код

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow) {

  HRESULT hRes = ::CoInitialize(NULL);
// If you are running on NT 4.0 or higher you can use the following call instead to 
// make the EXE free threaded. This means that calls come in on a random RPC thread.
//    HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
    ATLASSERT(SUCCEEDED(hRes));

#if (_WIN32_IE >= 0x0300)
    INITCOMMONCONTROLSEX iccx;
    iccx.dwSize = sizeof(iccx);
    iccx.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES;
    BOOL bRet = ::InitCommonControlsEx(&iccx);

    bRet;
    ATLASSERT(bRet);
#else
    ::InitCommonControls();
#endif

    hRes = _Module.Init(NULL, hInstance);

    CMessageLoop loop;
    _Module.AddMessageLoop(&loop);

    CMainDlg mainDlg;
    mainDlg.Create(0);

    int nRet = loop.Run();

    _Module.Term();
    ::CoUninitialize();

    _CrtDumpMemoryLeaks();
}


Код

#include "resource.h"
#include "precompile.h"

class CMainDlg : 
    public CDialogImpl<CMainDlg>, 
    public CWinDataExchange<CMainDlg>, 
    public CUpdateUI<CMainDlg>, 
    public CMessageFilter  
{

public:
    CMainDlg();
    virtual ~CMainDlg();

    enum { IDD = IDD_DIALOG_MAIN };

    BEGIN_MSG_MAP_EX(CMainDlg)
        MESSAGE_HANDLER_EX(WM_INITDIALOG, OnInitDialog)
        MSG_WM_CLOSE(OnClose)
        MSG_WM_DESTROY(OnDestroy)

        REFLECT_NOTIFICATIONS()
    END_MSG_MAP()
    
    BEGIN_DDX_MAP(CMainDlg)
    END_DDX_MAP()

    BEGIN_UPDATE_UI_MAP(CMainDlg)
    END_UPDATE_UI_MAP()

    LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/);

    BOOL PreTranslateMessage(MSG *pMsg);

    void OnDestroy();

    void OnClose();
};

Код

#include "MainDlg.h"

CMainDlg::CMainDlg() {

}

CMainDlg::~CMainDlg() {

}

LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/) {

    //add message filter
    _Module.GetMessageLoop()->AddMessageFilter(this); // <= Вот эта самая строчка !!!

    // center the dialog on the screen
    CenterWindow(0);
    ShowWindow(SW_SHOW);

    return 0;
}

BOOL CMainDlg::PreTranslateMessage(MSG *pMsg) {

    HWND focused = ::GetFocus();

    if (pMsg->message == WM_KEYDOWN) {
        
    } 

    return IsDialogMessage(pMsg);
}

void CMainDlg::OnDestroy() {
    PostQuitMessage(0);
}

void CMainDlg::OnClose() {
    _Module.GetMessageLoop()->RemoveMessageFilter(this);
    
    DestroyWindow();
}


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


 




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


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

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