【发布时间】:2012-03-13 22:37:15
【问题描述】:
为了在 64 位中捕获指针截断错误,我添加了提到的代码 sn-p here,它保留了底部 4GB 内存,因此分配器高于 32 位。在 MFC x64 测试应用程序中,我首先在 InitInstance() 中调用预留函数。然后我添加了一个简单的按钮:
CFileDialog dlg(TRUE);
dlg.DoModal();
调用 DoModal 最终会在“无人区”中的某个调用堆栈崩溃:
> 000000018000163b()
0000000100000024()
0000000000000001()
这不是 MFC 特定的,因为我使用 .NET FileDialog 得到了相同的行为。我认为这是我无法控制的事情,因为实际的 fileDialog 短暂显示然后崩溃。感觉像是一个 shell 扩展或其他东西,但我无法知道它的来源,因为调用堆栈没有帮助 - 但我想知道是否有什么我能做的!
如果我删除特殊预订功能,我就不会再遇到崩溃了。
困惑!
【问题讨论】:
-
嗯,它正在工作,你正在捕捉指针错误。只是不在您的代码中。使用 SysInternals 的 AutoRuns 实用程序禁用 shell 扩展。
-
如果你用
GetOpenFileName(msdn.microsoft.com/en-us/library/windows/desktop/…) 尝试同样的事情会发生什么? +Ton 网站下载... -
你能检查一下它出现在哪个模块的地址空间,或者堆栈被破坏了吗?
-
是的,我知道它有效(崩溃)!感谢 AutoRun 实用程序,我不知道它存在。但是,禁用所有 shell 扩展仍然会崩溃。至于模块,调用栈彻底砸了;我所拥有的就是我原来的帖子中的内容
-
我很好奇其他人是否有同样的行为,虽然我知道每个人的时间都很宝贵
标签: c++ winapi visual-c++ crash 64-bit