访问冲突写入位置0xCCCCCCCC

时间:2013-07-06 02:00:38

标签: c++ directx access-violation

所以我有一个我生命中见过的最奇怪的虫子。 我买了一本带有一些[示例代码]的DirectX 11书:http://www.d3dcoder.net/d3d11.htm 我很确定在某些时候我设法编译并运行每个示例应用程序,但现在,我在运行时出现“访问冲突写入位置0xCCCCCCCC”错误。

现在,这发生在以下一行:

ShadowsApp::ShadowsApp(HINSTANCE hInstance) : D3DApp(hInstance)
{
    mMainWndCaption = L"Shadows Demo"; <- Crashes here !!!  
    mLastMousePos.x = 0;
    mLastMousePos.y = 0;
    ...
}

mMainWndCaption在.h

中被声明为这样
std::wstring mMainWndCaption;

并在ShadowsApp类的构造函数中使用默认值设置继承自

D3DApp::D3DApp(HINSTANCE hInstance) : 
mhAppInst(hInstance),
mMainWndCaption(L"D3D11 Application"),...

我想,这已经很奇了...... 现在最奇怪的部分是当我在d3dApp.h中声明任何类型的ANY变量时,我不再有“访问冲突写入位置0xCCCCCCCC”错误,所有内容都构建并运行完美。 作为一名C#程序员,这对我来说绝对没有意义。如何在类中声明一个随机变量可以“修复”这样的事情?!

任何建议都将不胜感激: - )

2 个答案:

答案 0 :(得分:5)

  

运行时“访问冲突写入位置0xCCCCCCCC”错误。

您正尝试在调试版本中使用msvc下的单位指针。

初始化指针。

  

mMainWndCaption = L“Shadows Demo”; &lt; - 在这里崩溃!!!

在此位置安装断点,在调试器下运行应用程序,并调查变量内容(在“监视”窗口内,或将鼠标悬停在单个变量上),包括this指针。

答案 1 :(得分:5)

This page对处理堆栈和堆时可能遇到的各种“魔术值”有很好的描述和背景。

从页面:

  

如果您看到0xcccccccc位模式,则表示您正在读取当前线程堆栈中尚未初始化的内存。

鉴于你到目前为止发布的代码片段,以及你所描述的用基类中声明的另一个变量“修复”它,听起来像基础和派生对象可能不一致内存布局。它们是在同一个库还是可执行文件中?检查编译标志并确保它们匹配。

一种策略是将问题减少到重现问题的最小步骤集。您可以复制项目并开始删除字段和方法,直到它工作为止,看看是否有助于您进一步隔离它。