2013-03-25 85 views
1

所以我創建一個多線程的C++程序,它返回此錯誤:visual studio中的錯誤消息之後的消息是什麼意思?

Unhandled exception at 0x77e915de in HANASimulationSync.exe: 0xC0000005: Access violation reading location 0x00000020.

順便說一句,當我在一個單獨的線程運行這段代碼它不返回任何錯誤。我只想知道這是什麼樣的錯誤?它與內存管理有關嗎?

+5

是你沒有郵政編碼?????? – 2013-03-25 13:17:26

+3

@TonyTheLion「我只想知道這是什麼錯誤?」 – 2013-03-25 13:18:35

+0

這是一個運行時錯誤,通常稱爲「崩潰」。你應該做的是在調試器中運行你的程序。當發生崩潰時,調試器會停止,您可以檢查變量並查看函數調用堆棧。如果顯示的代碼不是您的代碼,請在代碼中加入調用堆棧。 – 2013-03-25 13:18:45

回答

13

這意味着您試圖從無效的內存位置讀取數據。在這種情況下,位置是0x00000020。由於這只是零點以上的小偏移量,因此您似乎可能會從空指針取消引用偏移量。

所以,看到這樣的事情的一種常見方法是,如果你的結構中有一個偏移量爲0x20的成員。然後如果你試圖從一個指針指向一個指針爲null的結構中讀取該成員。你會得到相同的錯誤索引到一個數組使用空指針。我想你現在就明白了。

其他相關信息是導致故障的代碼地址。在你的例子中是0x77e915de。如果您將鏈接器配置爲生成完整映像映射,您將能夠識別導致故障的哪一行代碼。更好的是,如果你生成調試信息,那麼你可以附加一個調試器。

一般而言,這種錯誤稱爲segmentation fault,或訪問衝突或保護錯誤。這些條款都意味着同樣的事情。

相關問題