当底部4GB已满时,FileDialog崩溃

FileDialog crash when bottom 4GB full

本文关键字:FileDialog 崩溃 满时 底部 4GB      更新时间:2023-10-16

为了捕捉64位中的指针截断错误,我添加了这里提到的代码片段,该代码片段保留了底部4GB的内存,因此分配高于32位。在MFC x64测试应用程序中,我首先在InitInstance()中调用保留函数。然后我添加了一个简单的按钮:

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

调用DoModal最终在"无人区"的某个地方崩溃,调用堆栈:

>   000000018000163b()  
    0000000100000024()  
    0000000000000001()  

这不是MFC特定的,因为我在.NET FileDialog中获得了相同的行为。我认为这是我无法控制的事情,因为实际的fileDialog会短暂显示,然后崩溃。感觉像是一个shell扩展之类的,但我不知道它是从哪里来的,因为调用堆栈没有帮助——但我想知道我能做些什么!

如果我取消了特殊的预订功能,我就不会再崩溃了。

困惑!

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

要么我的repo与你的不匹配,要么你的系统有什么不同。你应该发布你的项目,这样我们就可以删除其中一个变量。

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

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

为了跟进这个问题,我们发现360 sdk安装的shell扩展导致了问题(xeshlext.dll)