C++ 常見崩潰問題分析


 

C++ 常見崩潰問題分析

http://blog.csdn.net/kyfvc/article/details/7185365

一、前言

從事自動化測試平台開發的編程實踐中,遭遇了幾個程序崩潰問題,解決它們頗費了不少心思,解決過程中的曲折和徹夜的輾轉反側卻歷歷在目,一直尋思寫點東西,為這段難忘的經歷留點紀念,總結慘痛的教訓帶來的經驗,以期通過自己的經歷為他人和自己帶來福祉:寫出更高質量的程序;

 

由於 C 和 C++ 這兩種語言血緣非常近,文本亦對 C 編程語言有借鑒作用;

 

二、C++ 崩潰分類

一切的偶然並非偶然

在編程實踐中,遭遇到了諸如內存無效訪問、無效對象、內存泄漏、堆棧溢出等很多C / C++ 程序員常見的問題,最后都是同一個結果:程序崩潰,為解決崩潰問題,過程都是非常讓人難以忘懷的;

 

可謂吃一塹長一智,出現過幾次這樣的折騰后就尋思找出它們的原理和規律,把這些典型的編程錯誤一網打盡,經過系統性的分析和梳理,發現其內在機理大同小異,通過對錯誤表現和原理進行分類分析,把各種導致崩潰的錯誤進行歸類,詳細分類如下:

錯誤類型

具體表現

備注(案例)

聲明錯誤

變量未聲明

編譯時錯誤

初始化錯誤

未初始化或初始化錯誤

運行不正確

訪問錯誤

1、  數組索引訪問越界

2、  指針對象訪問越界

3、  訪問空指針對象

4、  訪問無效指針對象

5、  迭代器訪問越界

 

內存泄漏

1、  內存未釋放

2、  內存局部釋放

 

參數錯誤

本地代理、空指針、強制轉換

 

堆棧溢出

調用堆棧溢出:

1、遞歸調用

2、循環調用

3、消息循環

4、大對象參數

5、大對象變量

參數、局部變量都在棧(Stack)上分配

轉換錯誤

有符號類型和無符號類型轉換

 

內存碎片

小內存塊重復分配釋放導致的內存碎片,最后出現內存不足

數據對齊,機器字整數倍分配

 

其它如內存分配失敗、創建對象失敗等都是容易理解和相對少見的錯誤,因為目前的系統大部分情況下內存夠用;此外除0錯誤也是容易理解和防范;

 

 

C++記錄程序崩潰時的dumpfile

http://anfernee.blog.51cto.com/4828774/994536

    

        C++程序崩潰生成dump

http://blog.csdn.net/whatday/article/details/44857921

 


免責聲明!

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



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