C 常見的記憶體錯誤及其對策

2021-09-26 04:30:38 字數 1053 閱讀 2187

1、記憶體分配未成功,卻使用了它。 

程式設計新手常犯這種錯誤,因為他們沒有意識到記憶體分配會不成功。常用解決辦法是, 在使用記憶體之前檢查指標是否為 null。如果指標 p 是函式的引數,那麼在函式的入口 處用assert(p!=null)進行檢查。如果是用malloc或 new來申請記憶體,應該用if(p==null) 或 if(p!=null)進行防錯處理。 

2、記憶體分配雖然成功,但是尚未初始化就引用它。 

犯這種錯誤主要有兩個起因:一是沒有初始化的觀念;二是誤以為記憶體的預設初值 全為零,導致引用初值錯誤(例如陣列) 。 記憶體的預設初值究竟是什麼並沒有統一的標準,儘管有些時候為零值,我們寧可信其無不可信其有。所以無論用何種方式建立陣列,都別忘了賦初值,即便是賦零值也不 可省略,不要嫌麻煩。 

3、記憶體分配成功並且已經初始化,但操作越過了記憶體的邊界。 

例如在使用陣列時經常發生下標「多 1」或者「少 1」的操作。特別是在 for 迴圈語 句中,迴圈次數很容易搞錯,導致陣列操作越界。 

4、忘記了釋放記憶體,造成記憶體洩露。 

5、 釋放了記憶體卻繼續使用它。 

有三種情況: 

(1)程式中的物件呼叫關係過於複雜,實在難以搞清楚某個物件究竟是否已經釋放了記憶體,此時應該重新設計資料結構,從根本上解決物件管理的混亂局面。

(2)函式的 return 語句寫錯了,注意不要返回指向「棧記憶體」的「指標」或者「引用」, 因為該內存在函式體結束時被自動銷毀。

(3)使用 free 或 delete 釋放了記憶體後,沒有將指標設定為 null。導致產生「野指標」 。

記憶體分配時應注意:

(1)用 malloc 或 new 申請記憶體之後,應該立即檢查指標值是否為null。 防止使用指標值為null的記憶體。 

(2)不要忘記為陣列和動態記憶體賦初值。防止將未被初始化的記憶體作為右值使用。 

(3)避免陣列或指標的下標越界,特別要當心發生「多 1」或者「少 1」 操作。 

(4)動態記憶體的申請與釋放必須配對,防止記憶體洩漏。 

(5)用 free 或 delete 釋放了記憶體之後,立即將指標設定為 null,防止產 生「野指標」 。

常見記憶體錯誤及其對策

常見記憶體錯誤及其對策 發生記憶體錯誤是件非常麻煩的事情。編譯器不能自動發現這些錯誤,通常是在程式執行時才能捕捉到。而這些錯誤大多沒有明顯的症狀,時隱時現,增加了改錯的難度。有時使用者怒氣沖沖地把你找來,程式卻沒有發生任何問題,你一走,錯誤又發作了。常見的記憶體錯誤及其對策如下 一 記憶體分配未成功...

常見的記憶體錯誤及其對策

1.常見的記憶體錯誤及其對策 記憶體未分配成功卻使用了它 在使用記憶體之前檢查指標是否為null。如果指標p是函式的引數,那麼在函式的入口處用assert p null 進行檢查 如果使用malloc或者new來申請記憶體,應該用if p null 或if p null 進防錯處理。無論用何種方式建...

常見的記憶體錯誤及其對策

1,常見錯誤及其處理策略 1 記憶體分配未成功,卻使用了它。程式設計新手常犯這種錯誤,因為他們沒有意識到記憶體分配會不成功。常用解決辦法是,在使用記憶體之前檢查指標是否為null。如果指標p是函式的引數,那麼在函式的入口處用assert p null 進行 檢查。如果是用malloc或new來申請記...