1、初始化錯誤。
例如:malloc()返回的空間沒有進行初始化
2、未檢查返回值
3、對空指標或者無效指標解引用
4、引用已經釋放的記憶體(未定義) 例如
for(p=head;p!=null;p=p->next)
free(p);
可以寫成
for(p=head;p!=null:p=q)
5、對同一塊記憶體釋放多次:它會以一種不會立即顯現的方式破壞記憶體管理器中的資料結構。
例如:在錯誤處理中進行了釋放後,作用區域結束時再次進行了釋放
6、記憶體洩漏
7、零長度分配
malloc(0)返回的指標不是null;但是除了free,別的地方不要使用這個指標。
realloc(p,0)返回的可能是null;也可能是非null,但是同樣的除了在free中,別的地方不要使用這個指標
C語言常見記憶體管理錯誤
c語言常見記憶體管理錯誤 記憶體沒有分配就開始訪問。這常常是分配記憶體後,沒有返回值。如果記憶體分配失敗了,就開始使用,就會發生解引用空指標。記憶體沒有初始化,那麼其中的值是不確定的。如果程式設計師當做值是0來使用,就出現了錯誤。記憶體用完沒有釋放。這導致記憶體洩露。記憶體重複釋放。如果這塊記憶體已...
C 記憶體常見錯誤
在系統開發過程中出現的bug相對而言是比較好解決的,花費在這個上面的除錯代價不是很大,但是在系統整合後的bug往往是難以定位的bug 最好方式是打樁,通過打樁可以初步鎖定出錯的位置,如 進入函式前列印日誌,離開時再次列印日誌 而這些難以定位的bug基本分為2類 記憶體錯誤和並非問題。本文總結的時記憶...
記憶體管理 常見記憶體錯誤及對策
發生記憶體錯誤是 件麻煩事,編譯器不能自動的發現這些錯誤,通常是在程式執行時才能捕捉到,而這些錯誤大多沒有明顯症狀,時隱時現增加了改錯的難度。1 記憶體被分配成功,卻使用了它。如果指標p是函式的引數,那麼在函式的入口處用 assert p null 進行檢查 如果用malloc或new來申請記憶體,...