c++ PeekMessage()抛出未处理的异常(访问冲突)

b4wnujal  于 2024-01-09  发布在  其他
关注(0)|答案(2)|浏览(186)

在我的应用程序中,我使用以下代码:

  1. bool HandleMessages()
  2. {
  3. MSG msg;
  4. if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  5. {
  6. if (msg.message == WM_QUIT)
  7. return FALSE;
  8. TranslateMessage(&msg);
  9. DispatchMessage(&msg);
  10. }
  11. return true;
  12. }

字符串
我以为这是windows中消息处理的标准代码,但现在当我尝试运行程序时,我总是在PeekMessage()调用时得到一个Exception。
异常消息为
testing.exe:0xC 0000005中0x 57 a10 eed(msvcr100d.dll)处的未处理异常:在位置0x 666665 c处阅读时发生访问冲突。
我完全迷失在这里,不明白为什么它会抛出异常。有人得到了提示吗?
调用堆栈:
msvcr100d.dll!__local_unwind2()+0x 48配置Asm
msvcr100d.dll!_except_handler3()+0固定的配置文件Asm
正在测试.exe!_except_handler4(_EXCEPTION_RECORD * ExceptionRecord,_EXCEPTION_REGISTRATION_RECORD * ExceptionFrame,_CONTEXT * ContextRecord,void * DispatcherContext)+ 0x24 C
正在测试.exe!_except_handler4(_EXCEPTION_RECORD * ExceptionRecord,_EXCEPTION_REGISTRATION_RECORD * ExceptionFrame,_CONTEXT * ContextRecord,void * DispatcherContext)+ 0x24 C

  • 继续 *:

57 CE 0 EEA莱亚esi,[esi+esi*2]
57CE0EED mov ecx,dword ptr [ebx+esi*4]
57CE0EF0 mov dword ptr [esp+0Ch],ecx
57CE0EF4 mov dword ptr [eax+0Ch],ecx
57CE0EF7 cmp dword ptr [ebx+esi*4+4],0
57CE0EFC jne _lu_continue(57CE0F15h)
57 CE 0 EFE推送101 h
57CE0F03 mov eax,dword ptr [ebx+esi*4+8]
57CE0F07 call _NLG_Notify(57CE0F55h)
57CE0F0C mov eax,dword ptr [ebx+esi*4+8]
57CE0F10 call _NLG_Call(57CE0F74h)

fd3cxomn

fd3cxomn1#

  • 给我们看看你的调用栈。如果它在msvcr100d.dll中崩溃,那么它就发生在PeekMessage之外(在调用之前或之后)。你应该有很好的调试信息。
  • 查看this指针(如果适用)
  • 做一个重建所有
  • 步入拆解
xienkqul

xienkqul2#

我不认为你发布的调用堆栈足以从中做出任何事情。
是否有可能在响应消息时调用HandleMessages()?这可能导致递归/堆栈耗尽。

相关问题