【C++內存管理之三】常見的內存錯誤及其對策


發生內存錯誤時間非常麻煩的事情。編譯器不能發現這些錯誤,只能在程序運行時才能捕捉到。

1、內存分配失敗

內存分配失敗卻使用了它

指針p爲函數參數,在函數入口處進行檢查:

assert(p != NULL);

new或malloc申請內存進行判斷:

if(p == NULL)

2、內存沒有初始化

//野指針
int* p;
p = 10;
//報錯,使用了未初始化的變量p

3、內存操作越界

常見的數組越界,發生在下標多‘1’或少‘1’;
指針超過變量範圍(野指針)

4、內存沒有釋放

內存泄漏

5、內存釋放後繼續使用

1、懸空指針(野指針)
在這裏插入圖片描述
常見對策

規則
規則1 用malloc或new申請內存之後,應該立即檢查指針值是否爲NULL。防止使用指針值爲NULL的內存。
規則2 不要忘記爲數組和動態內存賦初值。防止將未被初始化的內存作爲右值使用。
規則3 避免數組或指針的下標越界,特別要當心發生“多1”或者“少1”操作。
規則4 動態內存的申請與釋放必須配對,防止內存泄漏。
規則5 用free或delete釋放了內存之後,立即將指針設置爲NULL,防止產生“野指針”。

野指針:指向一個已刪除的對象或未申請訪問受限內存區域的指針。
1、未初始化的指針(野指針)

//野指針
int* p;
p = 10;
//報錯,使用了未初始化的變量p

2、懸空指針(野指針)
在這裏插入圖片描述
3、指針越界
4、空指針
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章