天天看點

C++“讀取位置 0x****** 時發生通路沖突”的可能原因

這種錯誤的意思一般是指通路了不屬于自己的記憶體空間,出現這種錯誤有幾種原因:

1、給一個數組配置設定了比較小的記憶體空間,然後又給該數組賦了一個比較大的值,舉例說明:

Cpp代碼 

  1. char buf[80];  
  2. buf = "C++“讀取位置 0x****** 時發生通路沖突”的可能原因C++“讀取位置 0x****** 時發生通路沖突”的可能原因";  

解決方法:給數組配置設定更大一些的記憶體空間,如char buf[1000];

2、句柄或指針在使用前被釋放

解決方法:檢查代碼配合調試,揪出野指針

==========================================================================

0xC0000005: 讀取位置 0x000df02d 時發生通路沖突 2009-04-08 17:17

    這個錯誤,我TM找了快一周,終于在今天找到了,原因很簡單,但很不容易找,是因為我malloc了一塊記憶體(1000byte),然後我去讀檔案用的是 ReadFile(hFile,pStr ,fileLength,&dwByteRead,NULL);,這句話有錯嗎?咋一看上去沒錯呢,但仔細一看這地方就是有錯, 如果fileLength>1000,會有什麼結果呢? 總所周知,malloc是在堆上配置設定的空間,如果ReadFile讀成功了,那麼會在malloc(1000)以後的(fileLength-1000)的堆上寫資料,下一回,如果你用malloc或new在堆上配置設定記憶體是他就會出錯啦。

    就這一個小小的錯誤,郁悶了快一周,今天解決了,還算可以,沒有太大的耽誤項目工程的進展,還好還好。

    C和C++中的指針尤其優勢,尤其劣勢,優勢很明顯,靈活,友善,使用起來簡單;劣勢當然也很明顯,就是容易導緻系統崩潰,指針操作不當,或沒有及時釋放,或沒有判斷指針是否越界,或沒有及時置空,這些都很容易導緻系統崩潰,是以以後使用指針是一定要養成好的習慣,才能準确的使用指針。