4

我被赋予了调试 C++ 项目的任务。我在这个项目中没有写过一行代码!!

这个项目执行大约 5 分钟没有问题。然后它以异常“EITos.exe 中(某些 .dll 名称)处的未处理异常:0xC0000005:访问冲突读取位置”结束

现在每次我执行程序。该错误来自不同的dll。有时是其他程序员创建的dll,有时与QT有关。所以我认为这不是代码问题。是否有任何项目设置会影响这一点?

我正在询问有关如何调试此问题的一些一般提示和提示。

4

1 回答 1

0

使用 DLL 时的一个常见问题是在 DLL 中分配内存并在其他地方(在另一个 DLL 或主可执行文件中)取消分配。我认为你的问题可能来自类似的东西。

一种快速的解决方案是对/MD您正在使用的所有项目使用编译器标志。此选项指定运行时库应动态链接到可执行文件,以便在 dll 之间使用相同的分配器/解除分配器。你可以在这里阅读更多关于它的信息。

另外,请注意这一点:

不要混合运行时库的静态和动态版本。在一个进程中拥有多个运行时库副本可能会导致问题,因为一个副本中的静态数据不与另一个副本共享。链接器会阻止您在一个 .exe 文件中同时链接静态和动态版本,但您仍然可以得到两个(或更多)运行时库副本。例如,与运行时库的静态(非 DLL)版本链接的动态链接库在与运行时库的动态 (DLL) 版本链接的 .exe 文件一起使用时可能会导致问题. (您还应该避免在一个进程中混合库的调试和非调试版本。)

另一种方法是不在一个 dll 中分配内存并在另一个中取消分配。所以你可以检查代码,最终重新编写它。但这更耗时。

于 2012-12-21T13:40:30.600 回答