У меня есть некоторые проблемы с повреждением кучи. Предупреждение можно наблюдать при использовании функции CreateWindowExW. Я знаю, что обычно это ошибка памяти, но как я могу найти ее в такой ситуации? Перед вызовом CreateWindowExW нет новых переменных, и я не могу войти в эту функцию. Вот код.
HWND GetMainWnd(HINSTANCE hInstance){
static HWND hWnd = NULL;
if (hWnd)
return hWnd;
RETURN_AT_ERROR(hInstance, NULL);
WNDCLASSEX wcex = { sizeof(WNDCLASSEX) };
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = MainWndProc;
wcex.hInstance = hInstance;
wcex.hCursor = ::LoadCursorW(NULL, IDC_ARROW);
wcex.lpszClassName = g_config->GetWndClass();
ATOM atom = ::RegisterClassExW(&wcex);
RETURN_AT_ERROR(atom != 0, NULL);
hWnd = ::CreateWindowExW(WS_EX_LEFT, g_config->GetWndClass(), 0, WS_POPUP | WS_MINIMIZEBOX | WS_CLIPCHILDREN, 0, 0, 0, 0, 0, 0, hInstance, 0);
return hWnd;}
На этой строке
hWnd = ::CreateWindowExW(WS_EX_LEFT, g_config->GetWndClass(), 0, WS_POPUP | WS_MINIMIZEBOX | WS_CLIPCHILDREN, 0, 0, 0, 0, 0, 0, hInstance, 0);
есть окно предупреждения
Windows активировала точку останова в drm.exe. Это может быть связано с повреждением кучи, что указывает на ошибку в drm.exe или любой из загруженных библиотек DLL. Это также может быть связано с тем, что пользователь нажимает клавишу F12, когда фокус находится в drm.exe. Окно вывода может содержать дополнительную диагностическую информацию.
нажимаю "Продолжить" и показывает
Unhandled exception at 0x77dae753 in app.exe: 0xC0000374: A heap has been corrupted.
Однако CreateWindowExW возвращает ненулевое значение, и окно создается так, как должно быть...
g_config->GetWndClass()
), или это могло произойти в одном из обработчиков сообщений, вызываемых во время создания окна (например, WM_CREATE). Вам придется сузить его. - person Adrian McCarthy   schedule 27.02.2014