使用CreateWindowExW时堆损坏

使用CreateWindowExW时堆损坏

本文介绍了使用CreateWindowExW时堆损坏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些堆损坏的问题。使用CreateWindowExW函数时可以观察到警告。我知道它通常是一个内存错误,但我怎么能在这种情况下搜索?在调用CreateWindowExW之前没有新的变量,我无法进入这个函数。这是代码。

  HWND GetMainWnd(HINSTANCE hInstance){
static HWND hWnd =
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,hInstance,0);



$ b

  hWnd = :: CreateWindowExW(WS_EX_LEFT,g_config-> GetWndClass(),0,WS_POPUP | WS_MINIMIZEBOX | WS_CLIPCHILDREN,0,0,0, 0,0,hInstance,0); 

有一个警告消息框

我按继续,它显示

  app.exe中0x77dae753处的未处理异常:0xC0000374:堆已损坏。 

但是CreateWindowExW返回一个非零值,并创建窗口,因为它应该是...


I have some problems with heap corruption. The warning can be observed while using CreateWindowExW function. I know that it is usually a memory error, but how could I search it out in such situation? There are no new variables before calling CreateWindowExW and I can't step into this function. Here is the code.

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;}

On this string

hWnd = ::CreateWindowExW(WS_EX_LEFT, g_config->GetWndClass(), 0, WS_POPUP | WS_MINIMIZEBOX | WS_CLIPCHILDREN, 0, 0, 0, 0, 0, 0, hInstance, 0);

there is a warning message box

I press "Continue" and it shows

Unhandled exception at 0x77dae753 in app.exe: 0xC0000374: A heap has been corrupted.

However CreateWindowExW returns a non-zero value and window is created as it should be...

解决方案

As pointed out above, heap corruption is often detected after the real corruption has already occurred by some DLL/module loaded within your process. From your post it looks like this issue is windows platform specific so I would suggest you to use WinDBG/Pageheap and find out where actual memory corruption is happening. One very very good article about heap memory corruption analysis can be found from the book "Advanced Windows Debugging, Author: By: Mario Hewardt; Daniel Pravat" Chapter 06

http://advancedwindowsdebugging.com/ch06.pdf

这篇关于使用CreateWindowExW时堆损坏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-02 02:41