【发布时间】:2013-07-06 02:00:38
【问题描述】:
所以我遇到了我一生中见过的最奇怪的错误之一。 我买了一本 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 类型的 ANY 变量时,我不再出现“访问冲突写入位置 0xCCCCCCCC”错误,一切都构建并完美运行。 作为一个 C# 程序员,这对我来说完全没有意义。在一个类中声明一个随机变量怎么能“修复”这样的事情?!
任何建议将不胜感激:-)
【问题讨论】:
-
“当我在 ShadowsApp.h 中声明任何类型的任何变量时”是指为 ShadowsApp 类型声明成员变量吗?另外,您使用的是哪个版本的 MSVC? (我假设您使用的是 Visual Studio,因为这是一个 directx 项目)
-
是的,比如说:int foo;繁荣它工作......
-
这有更多的上下文吗?有问题的实例在哪里构造?
-
嗯,这几乎是应用程序的开始: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, PSTR cmdLine, int showCmd) { ShadowsApp theApp(hInstance); if( !theApp.Init() ) 返回 0;返回 App.Run(); }
-
您的代码可能在随机内存上乱涂乱画,并且创建“牺牲变量”会导致乱涂乱画出现在该变量上,而不是
mMainWndCaption的内部指针上。
标签: c++ directx access-violation