为了捕获64位指针截断错误,我添加了代码片段here,该代码片段保留底部4GB的内存,以便分配高于32位。在MFC x64测试应用程序中,我首先在InitInstance()中调用保留函数。然后我添加了一个按钮,简单地做:当底部4GB满时FileDialog崩溃
CFileDialog dlg(TRUE);
dlg.DoModal();
调用的DoModal最终在“无人区”调用堆栈某处崩溃:
> 000000018000163b()
0000000100000024()
0000000000000001()
,因为我得到了相同的行为这不是MFC特定一个.NET FileDialog。由于实际的fileDialog简要显示然后崩溃,我认为这是我手中的东西。感觉像是一个shell扩展或者其他什么东西,但是由于调用堆栈没有帮助,我无法得到它来自哪里,但是我想知道是否有任何事情可以做!
如果我删除特殊预留功能,我不会再发生崩溃。
困惑!
嗯,这是工作,你正赶上指针错误。只是不在你的代码中。使用SysInternals的AutoRuns实用程序禁用外壳扩展。 – 2012-02-23 14:02:29
如果您使用'GetOpenFileName'(http://msdn.microsoft.com/en-us/library/windows/desktop/ms646927%28v=vs.85%29.aspx)尝试相同的操作,会发生什么情况? + Ton site web est down ... – ixe013 2012-02-23 14:07:58
你可以检查它发生在哪个模块的地址空间,或者堆栈被捣毁吗? – 2012-02-23 14:21:39