国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

淺談c/c++中使用指針需要注意的問題

2020-01-26 14:34:37
字體:
來源:轉載
供稿:網友

一、使用指針的時候需要注意幾點:

• 分配空間

• 初始化

• 釋放

二、常見的錯誤有幾種:

1)內存分配未成功,卻使用了它

編程新手常犯這種錯誤,因為他們沒有意識到內存分配會不成功。常用解決辦法是,使用內存之前檢查指針是否為Null。

如果指針p是函數的參數,那么在函數的入口處用assert(p != NULL)進行檢查。如果使用malloc或new來申請內存,應該用if(p == NULL)或if(p != NULL)進行放錯處理。

2)內存分配雖然成功,但是尚未初始化就引用它

犯這種錯誤主要有個起因:一是沒有初始化的觀念;二是誤以為內存的缺省初值全為零,導致引用初值錯誤(eg. char p[]={‘/0'}).內存的缺省初值究竟是什么并沒有統一的標準,盡管有些時候為零,所以無論用何種方式創建數組,都別忘了賦初值,即便是賦零值也不可省略,不要嫌麻煩。

3)內存分配成功并且已經初始化,但操作越過了內存的邊界

例如在使用數組是經常發生下標”多1”或者“少1”的操作,特別是在for循環語句中,循環次數很容易搞錯,導致數組操作越界。

4)忘記了釋放內存,造成內存泄露

 含有這種錯誤的函數每被調用一次就丟失一塊內存,剛開始時系統的內存充足。你看不到錯誤。當程序所占內存大時,系統出現提示:內存耗盡。動態內存的申請與釋放必須配對,程序中malloc與free的使用次數一定要相同,否則肯定有錯誤

5)釋放了內存卻繼續使用它

出現這種情況,有三個原因:<1>程序中的對象調用關系過于復雜,實在難以搞清楚某個對象究竟是否已經釋放了內存,此時應該重新設計數據結構,從根本上解決對象管理的混亂局面。<2>函數的return語句寫錯了,注意不要返回指向“棧內存”的“指針”或者“引用”,因為該內存在函數體結束時被自動銷毀。<3>使用free或delete釋放了內存后,沒有將指針設置為NULL。導致產生“野指針”

[規則1] 用malloc或new申請內存之后,因該立即檢查指針值是否為NULL。防止使用指針值為NULL的內存。

[規則2] 不要忘記為數組和動態內存賦初值。防止將未被初始化的內存作為右值使用。

[規則3] 避免數字或指針的下標越界,特別要當心發生“多1”或者“少1”操作

[規則4] 動態內存的申請與釋放必須配對,防止內存泄漏

[規則5] 用free或delete釋放了內存之后,立即將指針設置為NULL,防止“野指針”

以上這篇淺談c/c++中使用指針需要注意的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 公主岭市| 大丰市| 奉新县| 偏关县| 兰州市| 扎赉特旗| 邯郸县| 焉耆| 宜兰市| 孟州市| 柯坪县| 包头市| 辽宁省| 四子王旗| 崇信县| 莱西市| 卫辉市| 南丰县| 福海县| 尼勒克县| 通许县| 昌平区| 徐闻县| 乌恰县| 张掖市| 彰化市| 竹北市| 昌平区| 疏勒县| 噶尔县| 白水县| 乌什县| 邻水| 宁波市| 萝北县| 通道| 河津市| 卫辉市| 菏泽市| 内乡县| 巴中市|