c – 使用CreateWindowExW时堆损坏

c – 使用CreateWindowExW时堆损坏,第1张

概述我有一些堆损坏的问题.使用CreateWindowExW函数时可以观察到警告.我知道这通常是一个内存错误,但我怎么能在这种情况下搜索它?在调用CreateWindowExW之前没有新变量,我无法进入此函数.这是代码. HWND GetMainWnd(HINSTANCE hInstance){static HWND hWnd = NULL;if (hWnd) return hWnd; 我有一些堆损坏的问题.使用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(),WS_POPUP | WS_MINIMIZEBox | WS_CliPCHILDREN,hInstance,0);return hWnd;}

在这个字符串上

hWnd = ::CreateWindowExW(WS_EX_left,0);

有一个警告信息框

windows has triggered a breakpoint in drm.exe. This may be due to a
corruption of the heap,which indicates a BUG in drm.exe or any of the
DLLs it has loaded. This may also be due to the user pressing F12
while drm.exe has focus. The output window may have more diagnostic
information.

我按“继续”,然后显示

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

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

解决方法 如上所述,在您的进程中加载​​的某些DLL /模块已经发生实际损坏之后,通常会检测到堆损坏.从你的帖子看起来这个问题是特定于windows平台的,所以我建议你使用WinDBG / Pageheap并找出实际内存损坏发生的地方.关于堆内存损坏分析的一篇非常好的文章可以在“高级windows调试,作者:作者:Mario Hewardt; DanIEl Pravat”一书中找到.

http://advancedwindowsdebugging.com/ch06.pdf

总结

以上是内存溢出为你收集整理的c – 使用CreateWindowExW时堆损坏全部内容,希望文章能够帮你解决c – 使用CreateWindowExW时堆损坏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1209844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存