發生記憶體錯誤是件非常麻煩的事情。編譯器不能自動發現這些錯誤,通常是在程式執行時才能捕捉到。而這些錯誤大多沒有明顯的症狀,時隱時現,增加了改錯的難度。有時使用者怒氣沖沖地把你找來,程式卻沒有發生任何問題,你一走,錯誤又發作了。 常見的記憶體錯誤及其對策如下:
* 記憶體分配未成功,卻使用了它。
有三種情況:
(1)程式中的物件呼叫關係過於複雜,實在難以搞清楚某個物件究竟是否已經釋放了記憶體,此時應該重新設計資料結構,從根本上解決物件管理的混亂局面。
(2)函式的return語句寫錯了,注意不要返回指向「棧記憶體」的「指標」或者「引用」,因為該內存在函式體結束時被自動銷毀。
(3)使用free或delete釋放了記憶體後,沒有將指標設定為null。導致產生「野指標」。
注意事項:
【規則1】用malloc或new申請記憶體之後,應該立即檢查指標值是否為null。防止使用指標值為null的記憶體。
【規則2】不要忘記為陣列和動態記憶體賦初值。防止將未被初始化的記憶體作為右值使用。
【規則3】避免陣列或指標的下標越界,特別要當心發生「多1」或者「少1」操作。
【規則4】動態記憶體的申請與釋放必須配對,防止記憶體洩漏。
【規則5】用free或delete釋放了記憶體之後,立即將指標設定為null,防止產生「野指標」。
常見的記憶體錯誤及解決方法
解決方法 在使用記憶體之前檢查指標是否為null?解決方法 解決方法 造成問題 解決方法 有三種情況 1 程式中的物件呼叫關係過於複雜,實在難以搞清楚某個物件究竟是否已經釋放了記憶體,此時就應該重新設計資料結構,從根本上解決物件管理的混亂局面。2 函式的return語句寫錯了,注意不要返回指向 棧記...
C 常見錯誤解決方法
c 中所有的字母 數字 括號以及標點符號均為英文輸入法狀態下的半形符號,而不能是中文輸入法或者英文輸入法狀態下的全形符號,具體的輸入法狀態及對應示例 如圖所示。這是水晶報表的問題。安裝完成後,在vs中開啟水晶報表檔案 rpt 在 字段資源管理器 中選中 資料庫字段 單擊右鍵,選擇第二項 設定資料來源...
C 常見錯誤及解決方法,持續更新
1.undefined reference to winmain 16 可能的原因是程式沒有主函式導致的編譯錯誤 2.include include using namespace std int main for int i 0 i 注 s要放在while迴圈中這樣每次輸入一種情況時s的值都會重新...