2

我在 Visual Studio 2010 中创建了一个运行 2 个使用事件(SetEvent(), WaitForSingleObject(), WaitForMultipleObjects())同步的线程的程序。发生以下情况:

  • 当我使用调试器运行该程序时,它会运行一段时间然后崩溃

  • 当我在不调试(.exe 文件)的情况下运行该程序时,它直接崩溃

  • 当我使用调试器在另一台计算机上运行该程序时,它会立即崩溃,并通过 .exe 文件在一段时间后崩溃

调试时报如下错误:

Unhandled exception at 0x5eafcaf7 (msvcr100d.dll) in test.exe: 0xC0000005: Access violation reading location 0x0036f000.

由于我不知道从哪里开始搜索,有人可以为这个主题带来一些启示吗?在调试器中运行代码与不运行代码有什么区别?(添加了哪种代码?)为什么不同的计算机在运行相同的代码时会有不同的行为?

在两台计算机中都有完全相同的操作系统(Windows 7),我假设相同的库和补丁。

谢谢您的帮助!


编辑 11.12.2012

我已经安装了应用程序验证程序并在 Visual Studio 中显示了一些错误,如下所示:

=========================================================== 
VERIFIER STOP 0000000000000013: pid 0x1E18: first chance access violation for
current stack trace

000000000874F000 : Invalid address being accessed
000000005201CAF7 : Code performing invalid access
000000000009E440 : Exception record. Use .exr to display it.
000000000009DF50 : Context record. Use .cxr to display it.
===========================================================

有人知道我如何查看哪个地址属于哪一行代码以确切知道异常发生的位置吗?我还在程序的帮助中读到,使用命令“!heap p -a ACCESS_ADDRESS”应该提供有关错误性质和堆块溢出的详细信息。我应该在哪里使用 Visual Studio 放置这个命令?

4

1 回答 1

1

在多线程环境中工作时,不同线程上的事情可能以不同的速度发生。在没有相关代码的情况下试图找出可能的原因是相当困难的。

该错误是一般的内存访问冲突错误。这通常发生在从函数返回的变量大于预期或类型不同时。

我们可以看看代码吗?

于 2012-12-07T15:12:03.247 回答