陣列 指標和記憶體管理

2021-07-22 18:50:27 字數 1461 閱讀 3605

關於指標:

一維指標儲存基本變數的位址

二維指標儲存一維指標變數的位址

三維指標儲存二維指標變數的位址

詳解:【linux c】**指標(一)

關於傳參:

傳一維陣列名,用陣列元素的指標來接

傳二維陣列名,用一維陣列的指標來接

傳三維陣列名,用二維陣列的指標來接

傳指標陣列,用指標的指標接

關於陣列名:

一維陣列名:指標常量,指向陣列首元素的位址

二維陣列名:首個一維陣列的位址(首行的位址)

三維陣列名:首個二維陣列的位址

如何避免野指標(養成良好的程式設計習慣):

1、當定義乙個指標,且該指標沒有指向時,將其置為空。

2、當要往指標指向的空間賦值時,先看是否給它分配了合法的空間。

&a;*(&a) == a;

1、對一維陣列的陣列名取位址等於陣列的位址。

對一維陣列的位址取值等於陣列首元素的位址。

2、對二維陣列的陣列名取位址等於二維陣列的位址。

對二維陣列的位址取值等於首個一維陣列的位址。

3、對三維陣列的陣列名取位址等於三維陣列的位址。

對三維陣列的位址取值等於首個二維陣列的位址。

陣列與指標的區別(主要):

陣列指標

空間分配

靜態分配

動態分配

訪問效率

直接訪問,效率高

間接訪問,效率低

安全性資料越界

記憶體洩漏

函式形參

都轉化成相應的指標

你的資料放在**:

棧(stack):區域性變數、函式形參、自動變數

堆(heap):malloc、realloc、calloc分配的空間

資料區(.bss段):未初始化的全域性變數

資料區(.data段)(靜態資料區):初始化過的全域性變數、靜態static修飾的變數

資料區(.rodata段):常量資料

**段(.text段):**

常見的記憶體錯誤及應對:

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

應對:在使用之前檢查記憶體是否分配成功。可以在使用記憶體之前檢查指標是否為null,若分配成功便可以使用,否則列印錯誤資訊並退出程式。

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

應對:①注意賦初值

②在檢查記憶體分配成功之後,先用memset或bzero函式清空分配好的記憶體空間原來的資料。

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

應對:在使用陣列時,注意是否操作越界。有沒有下標「多1」或「少1」的操作,特別要注意迴圈。

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

應對:用完了動態記憶體之後一定要釋放。動態記憶體的申請與釋放必須配對,程式中malloc與free的使用次數一定要相同,new/delete同理。

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

應對:釋放完記憶體之後要及時將指標置空。

指標 陣列及記憶體管理

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

指標(記憶體管理)

直接上總結 四種指標 前倆種是泛型 後倆種是普通的指標 unsafepointer unsafemutablepointer unsaferawpointer unsafemutablerawpointer 簡單示例 一 1.泛型指標示例 2.普通指標示例 3.應用示例 獲得變數的指標 二 1.示例...

C C 指標 陣列與記憶體管理(三)

關於c c 的記憶體管理,博主發現一篇博文已經總結的很好了。記憶體管理 這裡做幾點總結 1 函式體內的區域性變數儲存在棧上,但棧的記憶體容量有限,在linux下可以使用ulimit s檢視棧的記憶體容量。在程式中注意不要超過這個值。當相應的範圍結束時,區域性變數就不能在使用。2 使用malloc n...