2012-02-23 20 views
8

为了捕获64位指针截断错误,我添加了代码片段here,该代码片段保留底部4GB的内存,以便分配高于32位。在MFC x64测试应用程序中,我首先在InitInstance()中调用保留函数。然后我添加了一个按钮,简单地做:当底部4GB满时FileDialog崩溃

CFileDialog dlg(TRUE); 
dlg.DoModal(); 

调用的DoModal最终在“无人区”调用堆栈某处崩溃:

> 000000018000163b() 
    0000000100000024() 
    0000000000000001() 

,因为我得到了相同的行为这不是MFC特定一个.NET FileDialog。由于实际的fileDialog简要显示然后崩溃,我认为这是我手中的东西。感觉像是一个shell扩展或者其他什么东西,但是由于调用堆栈没有帮助,我无法得到它来自哪里,但是我想知道是否有任何事情可以做!

如果我删除特殊预留功能,我不会再发生崩溃。

困惑!

+5

嗯,这是工作,你正赶上指针错误。只是不在你的代码中。使用SysInternals的AutoRuns实用程序禁用外壳扩展。 – 2012-02-23 14:02:29

+0

如果您使用'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

+0

你可以检查它发生在哪个模块的地址空间,或者堆栈被捣毁吗? – 2012-02-23 14:21:39

回答

1

我无法重现这次崩溃。我创建了一个64位项目,添加了4 GB预留,并在其中打开了一个文件对话框。没有崩溃。

我的报告不符合你的要求,或者你的系统上有不同的东西。您应该发布您的项目,以便我们可以删除其中一个变量。

不幸的是我不记得TppWorkerThread是什么。

发布您的项目 - 所有源文件,资源文件,.vcxproj文件和.sln文件。然后我们可以调查。

+0

布鲁斯给了我一个想法:你确定在你的进程中没有加载其他DLL?我知道很多在对话框中加载自己的扩展,他们可能是把它们放下来的扩展。 – ixe013 2012-03-02 04:45:18

1

在这个问题上跟进,我们发现,通过360 SDK安装一个外壳扩展导致问题(xeshlext.dll)

+0

我自己的跟进。我们发现一个内部服务与360外壳扩展冲突并导致崩溃。升级到最新版本修复了一切。对不起,打扰你! – 2012-04-03 12:50:22

相关问题