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;  //未判斷a是否為空,就去使用很危險.
首先你不知道malloc是否會成功 如果失敗的話 返回的恰好是NULL 一般情況下 你分配這么點內存 是不會失敗的 但是正如你說的 幾個循環過后 你可能沒free 內存耗盡 或者產生碎片 malloc失敗了 
你又沒判斷 那么恰好問題就是給空指針賦值產生異常 下面的三種指針情況是網上的:大家可以根據自己的情況和他的對照着看看: 可能性 
3 種  1char *p;  p new char[number];  delete [] p;  ....  // always using p....  p = xxx; // access violation  2char *p; //隨機指向一個位置,可能會出問題. memcpy(p, xxx, number); // access violation  3char *p;  p new char[number];  delete [] p;  .........  delete [] p; // access violation 0xC0000005: Access Violation錯誤調試- - 補充一句話:(1)編譯時沒有問題           (2)運行時是一個循環計算,設置斷點,前幾個循環都沒有問題,到其中某一個循環(循環結束條件還沒有達到)會     出現上述問題。 這時候肯定就是你在哪一步中間將空指針賦了值。 (3)數組或者指針越界 只要是和內存相關的基本都是有可能的,當然數組或是指針越界,這個也是很常見的,這個就不舉例子了,相信大家都能理解什么意識,也知道怎么解決,這個就需要大家比較小心和仔細了。 ———————————————— 版權聲明:本文為CSDN博主「中華叢迅」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/hhq420684/article/details/18181099

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM