好的,我在MSDN论坛上提出了这个问题,但还没有得到任何回应,所以我想试试StackOverflow。
我目前正在使用VS2008和Win7开发DirectX应用程序。最近,我遇到了一个很严重的内存损坏错误,这个内存分配类抓取字节对齐的内存。在这个错误期间,我仍然可以运行调试和发布可执行文件,但由于指令被破坏或其他原因而崩溃,但它仍然会在崩溃之前执行一段时间。
然后我剥离了整个内存分配类。应用程序在IDE中完美运行(发布和调试版本),但我无法运行任何可执行文件。它们立即崩溃并显示未响应/停止工作的错误。我不认为这是我的环境问题,因为我在另一台之前没有问题的计算机上也遇到了同样的问题。
Dependency walker给出了“警告:至少找不到一个延迟加载依赖模块。警告:至少有一个模块由于延迟加载依赖模块中缺少导出函数而具有未解决的导入。”错误,并指出无法找到GPSVC.dll和IESHIMS.DLL。我已经读到这可能会误导,只是表示可能存在问题。而且Dependency walker在前一天并没有给我这个错误。
我没有修改任何配置或项目设置或添加新代码。有什么想法可以解决这种行为?
还有一个注意事项,我在同一天安装了Windows 7.1 sdk。这可能是某种与编译器相关的错误吗?
以防MSDN帖子上出现一些有用的信息,这里是链接http://social.msdn.microsoft.com/Forums/en-IE/vsdebug/thread/f692b394-8af2-4453-991c-aa6a443a9019
谢谢!
编辑 -
这里是Dependency Walker分析输出的最后几行
GetProcAddress(0x76CD0000 [c:\ windows \ syswow64 \ KERNEL32.DLL],“DecodePointer”)从地址0x6D8BAE4F在“c:\ windows \ syswow64 \ NVWGF2UM.DLL”中调用,并返回0x77B59D65。 GetProcAddress(0x76CD0000 [c:\ windows \ syswow64 \ KERNEL32.DLL],“DecodePointer”)从地址0x6D8BAE4F在“c:\ windows \ syswow64 \ NVWGF2UM.DLL”中调用,并返回0x77B59D65。 GetProcAddress(0x76CD0000 [c:\ windows \ syswow64 \ KERNEL32.DLL],“EncodePointer”)从地址0x6D8BAF60在“c:\ windows \ syswow64 \ NVWGF2UM.DLL”中调用,并返回0x77B60FDB。 GetProcAddress(0x76CD0000 [c:\ windows \ syswow64 \ KERNEL32.DLL],“DecodePointer”)从地址0x6D8BAF70在“c:\ windows \ syswow64 \ NVWGF2UM.DLL”中调用,并返回0x77B59D65。 在地址0x0110152E处发生了第二次机会异常0xC0000005(访问冲突),位于“c:\ users \ joel \ desktop \ DXAPP.EXE”中。使用代码255(0xFF)退出了“c:\ users \ joel \ desktop \ DXAPP.EXE”(进程0x27D8)。这是指DLL抓取空指针还是我的实际指令?我将快速阅读如何使用WinDbg,如果这没有立即解决问题,我将发布其输出。
编辑2 -
简单地运行应用程序并按调试以打开Visual Studio始终将我带到编译着色器的位置。我暂时认为问题的根源在于此。但是,我仍然不理解在使用IDE和不使用时执行之间的行为变化。
解决方案! -
我被先前的内存损坏错误所困扰,以至于我没有意识到我的着色器不在可执行文件的本地目录中。这反过来生成了一个空指针,在调用D3DX11CompileFromFile()后未正确处理。