【问题标题】:MFC Application crash immediately after startMFC 应用程序启动后立即崩溃
【发布时间】:2013-12-13 02:59:35
【问题描述】:

我只是在 Windows8 x64 上的 Visual Studio 2012 中创建了一个 win32 项目。项目首先是空的。我在项目中添加了一个简单的 source.cpp 文件。我粘贴了这些代码行(这是一本书的示例)。

#include <afxwin.h>
#include <windows.h>


struct CSimpleApp : public CWinApp
{ 
BOOL InitInstance() { return TRUE; }
}; 

AfxWinMain 中 winmain.cpp 中的程序崩溃

if (!pThread->InitInstance())

错误是

Win32Project2.exe 中 0x0F6AD5D2 (mfc110ud.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000000。

我该如何解决这个错误

【问题讨论】:

  • 错误表示访问了NULL 指针。请编辑您的问题以包含更完整的示例,最好是SSCCE。此外,在调试器中时,您应该查找函数调用堆栈以查看您的代码,这可能是问题所在。
  • 我写的所有代码都是第一部分。 winmain.cpp 中出现的错误属于 microsoft。我知道 pThread 是 NULL。但我不知道程序为什么调用这个文件,为什么这个指针是NULL。
  • 谷歌搜索“afxwinmain pthread null”给出了一些结果,例如blogs.msdn.com/b/dsvc/archive/2009/06/21/…你有一个
  • 你创建了CSimpleApp全局变量吗?

标签: c++ visual-studio-2012 mfc


【解决方案1】:

如果我正确理解了这个问题,您已经创建了一个空项目,并且只是将这些代码行添加到了一个新的 cpp 文件中。

如果您想使用 Afx 支持或 MFC,您需要在创建项目时声明。 我建议您让 IDE 创建一个-空项目,检查构建并运行,然后开始向其中添加代码。

pthread 应该由框架为您初始化 - 如果您允许它自动为您生成支持代码。从内存中,它至少创建了一个名为 theApp 类型为 CWinApp 的全局 (arggg) 变量,它将初始化它需要的东西,比如线程。

仔细阅读本书(样本)并按照所有说明进行操作。如果这不起作用,请买一本更好的书。或者买整本书。或者通过 msdn 上的tutorials 工作。

【讨论】:

  • 是的 CWinApp,为我工作。还必须不要将 m_pMainWnd 保留为 NULL。
【解决方案2】:

今天,我的一个 MFC 测试项目发生了类似的奇怪崩溃,调用堆栈如下:

    mfc100u.dll!AfxWinMain()  + 0x69 bytes  
>   my.exe!__tmainCRTStartup()  Line 547 + 0x24 bytes   C
    kernel32.dll!BaseThreadInitThunk()  + 0xd bytes 
    ntdll.dll!RtlUserThreadStart()  + 0x21 bytes    

和访问冲突:

Unhandled exception at 0x69e97505 (mfc100u.dll) in my.exe: 0xC0000005: Access violation reading location 0x0000000000000000.

我有一个类似的测试项目运行良好,所以我比较了链接器设置,发现损坏的项目缺少 /SUBSYSTEM 开关(GUI -> 属性 -> 链接器 - > 子系统:"")。

将此设置中的空值修复为Console (/SUBSYSTEM:CONSOLE) 使项目再次运行。

【讨论】:

  • 谢谢。有一个很久没有建成的项目。即使它是简单的控制台应用程序,它也有 Windows (/SUBSYSTEM:WINDOWS)。更改 Windows (/SUBSYSTEM:CONSOLE) 修复了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 1970-01-01
相关资源
最近更新 更多