代码之家  ›  专栏  ›  技术社区  ›  JamesG

为什么我看不到“应用程序错误”对话框?

  •  0
  • JamesG  · 技术社区  · 15 年前

    我有兴趣学习更多关于在前女友和DLL之间混合运行时的知识。在WinXP机器上,我根据发行版运行时(/MD)创建了一个dll构建,并创建了一个exe来调用dll中构建的debug(/MDd)函数。dll中的函数将内存分配给堆,exe将其删除。我以为它会崩溃,但它却挂了起来。使用 ProcessExplorer 我看到可执行文件的状态是“等待:用户请求". 在Vista机器上做同样的练习

    我试过所有建议的反面 here . 我在谷歌上搜索了很长一段时间了。我已经尝试过启用所有我可以在中找到的错误报告服务gpedit.msc软件并验证错误报告服务是否正在“管理工具”->“服务”对话框中运行。

    明确地说,这是我的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;
    }
    
    2 回复  |  直到 9 年前
        1
  •  2
  •   TheUndeadFish    15 年前

    如果在每台机器的执行过程中发生了一些甚至稍有不同的情况,可能会导致一台挂起,而另一台立即崩溃。

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

    我怀疑只有对运行时和堆管理器非常熟悉的人才能确切地回答为什么会有区别。

        2
  •  0
  •   alexyorke    15 年前

    XP和Vista有不同的系统架构,可能还有不同的汇编代码。你在哪台机器上编译程序?XP还是vista?