錯誤error: Exception at 0x613baa14, code: 0xc0000005: read access violation at: 0x0, flags=0x0 (first chance)的解決辦法


一.錯誤原因

出現這個錯誤的原因多半是由於指針出現錯誤,即出現了空指針,也有說是變量沒有初始化,筆者碰到的情況是發生了內存溢出。

二.定位方法

一般這種問題直接導致程序崩潰,直接調試,就能找到對應的問題函數A,仔細檢查一下指針變量就能找到原因。事實上有可能出現問題的地方並不是報錯的函數A,筆者出現的問題就是,報錯的函數A中調用的另一個函數B出現了問題,最后B調用結束,才拋出錯誤,所以調試器將錯誤定位到了函數A中B調用結束的下一行。

三.具體錯誤

在函數B中,筆者使用了sscanf_s(ptr,"%d",&num) 函數,為了節省空間,num申請的是unsigned char類型。事實上正是這個函數出現了問題,%d默認傳入的變量是int類型,因此導致了內存溢出。這種問題需要編程時多加注意。

附: 關於sscanf_s的陷阱

``` #include typedef struct AA { unsigned char a; unsigned char b; }SAA; int main(int argc, char *argv[]) { SAA var; char s[]="10"; var.a=1; var.b=2; sscanf_s(s,"%hhu",(unsigned char*)&var.a,sizeof(var.a));//在給var.a賦值時,影響了var.b printf("%hhu %hhu",var.a,var.b);//預期輸出10 2,實際輸出10 0; return 0; } ``` 這個可能與編譯器有關,sscanf_s處理%hhu仍當4個字節出處理,故覆蓋了var.b的值,可使用int型中間變量解決這個問題。


免責聲明!

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



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