gpt4 book ai didi

c++ - 为什么我看不到 "Application Error"对话框?

转载 作者:行者123 更新时间:2023-11-28 03:55:44 25 4
gpt4 key购买 nike

我有兴趣了解更多关于在 exe 和 dll 之间混合运行时的信息。在 WinXP 机器上,我创建了一个针对发布运行时 (/MD) 的 dll 构建和一个调用构建调试 (/MDd) 的 dll 中的函数的 exe。 dll中的函数为堆分配内存,exe删除。我预计这会崩溃,但是它会挂起。使用ProcessExplorer我看到可执行文件的状态是“wait:userrequest”。在 Vista 机器上进行的相同练习确实显示了该对话框。我也想在我的 XP 机器上看到该对话框!

我尝试了与所有建议相反的方法 here .我已经用谷歌搜索了很长一段时间了。我试过启用所有可以在 gpedit.msc 中找到的错误报告服务,并验证了错误报告服务正在 AdministrativeTools->Services 对话框中运行。

明确地说,这是我的 dll:

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;
}

最佳答案

您的程序已进入未定义和错误的行为。为什么期望在不同的操作系统上得到完全相同的结果?

如果在这些机器上的每台机器上执行过程中发生了一些稍微不同的事情,它可能会导致一个挂起而另一个立即崩溃的结果。

也许程序使用的运行时在这些机器/操作系统之间略有不同。也许操作系统的其他方面正在产生影响(例如,address space layout randomization)。

我怀疑只有对运行时和堆管理器非常了解的人才能准确回答为什么会有差异。

老实说,我对这个问题的直觉 react 是:你不应该花太多时间担心为什么这两个操作系统的程序失败是不同的,因为你一开始就不应该编写这样的程序。

关于c++ - 为什么我看不到 "Application Error"对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3721081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com