首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一次机会例外(ntdll.dll)

一次机会例外(ntdll.dll)
EN

Stack Overflow用户
提问于 2013-07-02 06:48:46
回答 1查看 10.8K关注 0票数 0

知道我为什么会犯这个错误吗?

这是一个完整的错误:

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

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

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

这是一个很小的例子,说明了这个错误:

代码语言:javascript
复制
#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();
}

构造函数如下:

代码语言:javascript
复制
Grid::Grid() {
    Width = 100;
    Height = 100;
}

调用堆栈:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2013-08-20 08:48:39

即使没有完整的源代码、正在获得的异常和显示的堆栈,看起来也与另一个已解决的堆栈溢出公告类似:

"Unhandled exception at 0x777122D2 (ntdll.dll) in ArticxEngine.exe: 0xC0000005: Access violation writing location 0x00000004

堆栈显示,Grid()是从SFML的纹理()派生的,而纹理又是从GlResource()派生的。问题是,网格是一个静态变量,在GlResource()的内部互斥之前构建。

解决方案与其他堆栈溢出公告相同:确保Grid对象是非静态的,并且是在main()开始运行后构造的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17419146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档