C++ 为什么我看不到“我不知道”;应用程序错误“;对话框?
我有兴趣学习更多关于EXE和DLL之间混合运行时的知识。在WinXP机器上,我根据发布运行时(/MD)创建了一个dll构建,并创建了一个exe,该exe调用dll中构建的调试(/MDd)函数。dll中的函数将内存分配给堆,exe将其删除。我以为它会崩溃,但它却挂起了。使用我看到可执行文件的状态是“wait:userrequest”。Vista机器上的相同练习显示对话框。我也想在我的XP机器上看到这个对话框 我试过所有建议的反面。我已经在谷歌上搜索了很长一段时间了。我已经尝试过启用gpedit.msc中的所有错误报告服务,并验证了错误报告服务是否正在AdministrativeTools->services对话框中运行 明确地说,这是我的dll:C++ 为什么我看不到“我不知道”;应用程序错误“;对话框?,c++,c,windows,windows-xp,runtime,C++,C,Windows,Windows Xp,Runtime,我有兴趣学习更多关于EXE和DLL之间混合运行时的知识。在WinXP机器上,我根据发布运行时(/MD)创建了一个dll构建,并创建了一个exe,该exe调用dll中构建的调试(/MDd)函数。dll中的函数将内存分配给堆,exe将其删除。我以为它会崩溃,但它却挂起了。使用我看到可执行文件的状态是“wait:userrequest”。Vista机器上的相同练习显示对话框。我也想在我的XP机器上看到这个对话框 我试过所有建议的反面。我已经在谷歌上搜索了很长一段时间了。我已经尝试过启用gpedit.m
int* getDllMem(){
printf("dll alloc mem");
int *ptr = new int;
return ptr;
}
这是我的exe:
int main()
{
printf("main\n");
int *ptr = getDllMem();
printf("main delete\n");
delete ptr;
printf("main exit\n");
return 0;
}
XP和Vista有不同的系统架构,可能还有不同的汇编代码。你在哪台机器上编译程序?XP或vista?您的程序已进入未定义的错误行为。为什么期望在不同的操作系统上得到完全相同的结果 如果在每台机器上执行的过程中发生了细微的变化,那么很可能会导致其中一台挂起,而另一台立即崩溃 也许程序使用的运行时在这些机器/操作系统之间略有不同。也许操作系统的其他方面也有影响(例如) 我怀疑只有对运行时和堆管理器非常熟悉的人才能准确地回答为什么会有差异
老实说,我对这个问题的直觉反应是:你不应该花太多时间担心为什么这两个操作系统的程序失败是不同的,因为你根本不应该编写这样的程序。这个程序只在XP上编译。当复制到Vista时,我看到一个有错误的对话框。也许一个快速的解决方案是使用try/catch语句,并优雅地处理错误。