0

所以我正在创建一个多线程 C++ 程序,它返回这个错误:

HANASimulationSync.exe 中 0x77e915de 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000020。

顺便说一句,当我在单个线程中运行此代码时,它不会返回任何错误。我只想知道这是什么错误?它与内存管理有关吗?

4

1 回答 1

14

这意味着您试图从无效的内存位置读取。在这种情况下,位置是0x00000020。由于这只是零以上的一个小偏移量,因此您似乎可能正在取消引用来自空指针的偏移量。

因此,查看此类内容的一种常见方法是,如果您有一个成员位于 offset 的结构0x20。然后,如果您尝试从指向指针为空的结构的指针中读取该成员。使用空指针对数组进行索引也会出现同样的错误。我想你现在明白了。

其他相关信息是导致故障的代码地址。在你的例子中是0x77e915de. 如果您将链接器配置为生成完整的图像映射,您将能够识别导致错误的代码行。更好的是,如果您生成调试信息,那么您可以附加一个调试器。

一般而言,这种错误称为分段错误、访问冲突或保护错误。这些术语的意思都是一样的。

于 2013-03-25T13:18:11.663 回答