【发布时间】:2011-01-07 14:04:39
【问题描述】:
我正在 MFC /c++ 中创建一个简单的应用程序。此代码是为了在 CWinApp 类中创建一个对话框。它编译良好并且运行良好,但前提是我从 VStudio 运行它。但如果我直接运行它,运行时错误发生并且程序崩溃了。
CMyDialog dlg;
m_pMainWnd = (CWnd*)&dlg;
dlg.DoModal();
但是如果我使用下面的代码,那么一切都很好。我无法理解这种行为。
CMyDialog *dlg=new CMyDialog();
m_pMainWnd = (CWnd*)dlg;
dlg->DoModal();
在过去的一些其他 C++(非 MFC)项目中,这种事情也发生过很多次。 请告诉我这个。
【问题讨论】:
-
当问题发生时,您能否发布第一种情况的调用堆栈?
-
我实际上已经理解了这个问题。但是这里是调用堆栈。(仅在发布模式下出错)。 > ntdll.dll!7c911e58() [下面的帧可能不正确和/或丢失,没有为 ntdll.dll 加载符号] ntdll.dll!7c918251() ntdll.dll!7c911c76() ntdll.dll!7c911538() ntdll。 dll!7c9106eb() ntdll.dll!7c9140bb() kernel32.dll!7c801a4f() ntdll.dll!7c90e234() kernel32.dll!7c8110db() kernel32.dll!7c801a24() ...其他也不过注释大小溢出StackOverflow ...
-
在这种情况下,我通常会在崩溃后立即选择“调试”。假设 Visual Studio 是用 DEBUG 版本打开的,即使你双击可执行文件,你仍然可以在崩溃后调试程序并找到问题的根源。