0

任何想法为什么我会收到此错误?

这是完整的错误:

Test.exe 0xC0000005 中 0x77202282 (ntdll.dll) 的第一次机会异常:访问冲突写入位置 0x0000004

在 Test.exe 0xC0000005 中的 0x77202282 (ntdll.dll) 处取消处理异常:访问冲突写入位置 0x0000004

  • 调试中断在行Grid::Grid()
  • Root.hpp包含一个私有成员static Grid grid;
  • Root.cpp初始化这个Grid Root::Grid;

我确实有SFML静态链接,这给我带来了一些麻烦。

这是一个显示此错误的小示例:

#include <fstream>
#include <sstream>
#include <Windows.h>

#include "Root.hpp"

Grid Root::grid;

int main (uchar argc, char **argv) {
    Root root;
    Root::Prepare(root);
    return Root::GetStatus();
}

构造函数如下:

Grid::Grid() {
    Width = 100;
    Height = 100;
}

调用堆栈:

ntdll.dll!772022b2()    Unknown
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
Test.exe!sf::priv::MutexImpl::lock(void)    Unknown
Test.exe!sf::Mutex::lock(void)  Unknown
Test.exe!sf::Lock::Lock(class sf::Mutex &)  Unknown
Test.exe!sf::GlResource::GlResource(void)   Unknown
Test.exe!sf::Texture::Texture(void) Unknown
>   Test.exe!Grid::Grid() Line 5    C++
Test.exe!`dynamic initializer for 'Root::grid''() Line 11   C++
msvcr110d.dll!_initterm(void (void) * * pfbegin, void (void) * * pfend) Line 894    C
Test.exe!__tmainCRTStartup() Line 460   C
Test.exe!mainCRTStartup() Line 377  C
kernel32.dll!767533aa() Unknown
ntdll.dll!77219ef2()    Unknown
ntdll.dll!77219ec5()    Unknown
4

1 回答 1

2

即使没有完整的源代码,您得到的异常以及您显示的堆栈看起来也与另一个已解决的 Stack Overflow 帖子相似:

ArticxEngine.exe 中 0x777122D2 (ntdll.dll) 处的未处理异常:0xC0000005:访问冲突写入位置 0x00000004

您的堆栈显示 Grid() 派生自 SFML 的 Texture(),而后者又派生自 GlResource()。问题是您的网格是在 GlResource() 的内部互斥体之前构建的静态变量。

该解决方案与其他 Stack Overflow 帖子相同:确保您的 Grid 对象是非静态的,并且是在您的 main() 开始运行之后构造的。

于 2013-08-20T08:48:39.800 回答