c c 中使用指標需要注意的問題

2022-07-26 18:33:13 字數 994 閱讀 9851

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

二、常見的錯誤有幾種:

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

程式設計新手常犯這種錯誤,因為他們沒有意識到記憶體分配會不成功。常用解決辦法是,使用記憶體之前檢查指標是否為null。

如果指標p是函式的引數,那麼在函式的入口處用assert(p != null)進行檢查。如果使用malloc或new來申請記憶體,應該用if(p == null)或if(p != null)進行放錯處理。

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

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

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,防止「野指標」

c c 使用指標需要注意的問題

分配空間 初始化 釋放 二 常見的錯誤有幾種 1 記憶體分配未成功,卻使用了它 程式設計新手常犯這種錯誤,因為他們沒有意識到記憶體分配會不成功。常用解決辦法是,使用記憶體之前檢查指標是否為null。如果指標p是函式的引數,那麼在函式的入口處用assert p null 進行檢查。如果使用malloc...

c c 指標精講和需要注意的地方

int x 10 不能對10取位址 因為他不在 堆疊區 堆疊常量區的都b可以對變數取位址10就是乙個字面量 不能取位址 1 指標是一種資料型別 1 指標也是一種變數,占有記憶體空間,用來保持記憶體位址,在一般情況下所有指標 都是4個位元組 2 p操作記憶體 再指標宣告時,號表示所宣告的變數為指標,在...

C 中使用Random方法時需要注意的問題

最近碰到個很有趣的問題,以前沒做過這種專案所以沒發現random 方法竟然會生成相同的隨機資料。先貼個圖吧 左側是預設的使用random方法生成的隨機字串,竟然會重複,也就是說.net的自帶隨機函式其實是使用一定的演算法結合當前的時間去生成乙個隨機數的。因為我的輸出過快導致在相同的時間使用rando...