底部4GB满时FileDialog崩溃

Fra*_*vin 8 c++ crash 64-bit winapi visual-c++

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

CFileDialog dlg(TRUE);
dlg.DoModal();
Run Code Online (Sandbox Code Playgroud)

调用DoModal最终在某个地方遇到了一个"无人地带"的callstack:

>   000000018000163b()  
    0000000100000024()  
    0000000000000001()  
Run Code Online (Sandbox Code Playgroud)

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

如果我删除了特殊预约功能,我就不会再崩溃了.

困惑!

小智 1

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

要么我的重现与您的不匹配,要么您的系统上有一些不同的东西。您应该发布您的项目,以便我们可以删除其中一个变量。

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

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