【问题标题】:0xC0000005 - Access violation (Each time from a different dll)0xC0000005 - 访问冲突(每次来自不同的 dll)
【发布时间】:2012-12-21 12:45:42
【问题描述】:

我的任务是调试 C++ 项目。这个项目我没有写过一行代码!!

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    另外,请注意这一点:

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

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

    【讨论】:

    • 感谢您的回复。但这似乎没有帮助。我现在正在检查这个巨大的代码。
    猜你喜欢
    • 2017-08-31
    • 2012-05-22
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    相关资源
    最近更新 更多