0xC0000005 - 访问冲突(每次来自不同的dll)

时间:2012-12-21 12:45:42

标签: visual-c++ dll access-violation

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

另外,请注意这一点:

  

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

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