处有未经处理的异常:0xC0000005 : 读取位置 0x00000000 时发生访问冲突。
轉
????首先排除一種小概率事件就是系統沖突導致的,比如系統盤目錄存在類似的第三方庫文件,程序運行將崩潰,并報錯0xC0000005 : 讀取位置 0x00000000 時發生訪問沖突。
????上面的意思就是,你把值付給了不該賦給的變量,或者說你把值付給了不能付給的變量(或者常量)
(1)最簡單也最直接的錯誤可能就是scanf()的問題,我們都知道輸入的時候都是scanf("%格式",&變量),那么除了字符串(可要&,可不要)之外,所有的輸入都需要&,如果你丟了,在很多編譯器上變異的時候是查不出來的,也就是說是沒有錯的,但是輸入數據會差生上述錯誤,是因為寫成scanf("%格式",變量)這種形式了,這樣你所輸入的變量就不知道會存儲到哪里。
(2)空指針賦值的問題。
????我們知道如果某一個指針是空的是不能直接給他賦值的,原因是空指針不知道指得什么東西,那么他沒有固定的內存,現在你給他賦值,通俗點理解就是他不知道該怎么存,也不知道存在哪,也不會儲存,但是現在你有需要讓他存儲,那么就會出現上述的問題,這時候解決辦法就是重新申請空間(用malloc或者new),或者是你盡量避免他成為空指針,或者是當他有成為空指針的可能性時,你就單獨討論。
下面幾個例子就是有可能的:
下面的語句會出這個問題
int * p = 0;
p[0] = 100;
????當然,實際代碼中不可能這么明顯,這只是一個例子,可能相似,這得你自己好好看看,上面的0實際上和NULL是一樣的,這就是空指針賦了值。
下面這種寫法也會產生問題
a=(double*)malloc(sizeof(double)*6);
h=…
a[0]=h;
????首先你不知道malloc是否會成功 如果失敗的話 返回的恰好是NULL 一般情況下 你分配這么點內存 是不會失敗的 但是正如你說的 幾個循環過后 你可能沒free 內存耗盡 或者產生碎片 malloc失敗了 你又沒判斷 那么恰好問題就是給空指針賦值產生異常
下面的三種指針情況是網上的:大家可以根據自己的情況和他的對照著看看:
可能性 3 種
1:
char *p;
p = new char[number];
delete [] p;
…
// always using p…
p = xxx; // access violation
2:
char *p;
memcpy(p, xxx, number); // access violation
3:
char *p;
p = new char[number];
delete [] p;
…
delete [] p; // access violation
0xC0000005: Access Violation錯誤調試- -
補充一句話:
(1)編譯時沒有問題
(2)運行時是一個循環計算,設置斷點,前幾個循環都沒有問題,到其中某一個循環(循環結束條件還沒有達到)會 出現上述問題。
這時候肯定就是你在哪一步中間將空指針賦了值。
(3)數組或者指針越界
只要是和內存相關的基本都是有可能的,當然數組或是指針越界,這個也是很常見的,這個就不舉例子了,相信大家都能理解什么意識,也知道怎么解決,這個就需要大家比較小心和仔細了。
總結
以上是生活随笔為你收集整理的处有未经处理的异常:0xC0000005 : 读取位置 0x00000000 时发生访问冲突。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多维数组与指针之间的关系详解
- 下一篇: OpenCV Mat矩阵(图像Mat)初