指標 陣列及記憶體管理

2021-08-20 10:31:15 字數 2167 閱讀 2891

我們先來了解一下c與c++的記憶體管理。

常見的記憶體錯誤及其對策:

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

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

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

忘記了釋放記憶體,造成記憶體洩露:

釋放了記憶體卻繼續使用它:

針對這些問題總結出了以下規則:

指標與陣列

下面以字串為例比較指標與陣列的特性:

int main()

int main()

計算記憶體容量:

int main()

指標引數是如何傳遞記憶體的?

void getmemory(char *p, int num)

void test(void)

void getmemory2(char **p, int num)

void test2(void)

char *getmemory3(int num)

void test3(void)

char *getstring(void)

void test4(void)

我們做如下修改:

char *getstring2(void)

void test5(void)

杜絕「野指標」

class a 

};void test(void)

p->func(); // p是「野指標」

}

malloc/free與new/delete的區別:

class text

~text()

void initialize()

void destroy()

};void usemallocfree(void)

void usenewdelete(void)

malloc/free 的使用要點:

int *p = (int *) malloc(sizeof(int) * length);

new/delete 的使用要點

int *p1 = (int *)malloc(sizeof(int) * length);

int *p2 = new int[length];

class

objvoid test(void)

在用delete釋放物件陣列時,留意不要丟了符號『』。例如:

陣列 指標及記憶體

一 記憶體四區 a 區。存放 b 全域性區。全域性的常量 字串常量和變數 c 棧區。系統自動開闢,系統自動釋放,並不是很大。比如for迴圈中的int i 0。d 堆區。動態開闢的記憶體,手動開闢,手動釋放。大。比如自己定義的資料結構 a 編號連續 b 唯一的 c 取位址運算子 單目運算子,優先順序很...

陣列 指標和記憶體管理

關於指標 一維指標儲存基本變數的位址 二維指標儲存一維指標變數的位址 三維指標儲存二維指標變數的位址 詳解 linux c 指標 一 關於傳參 傳一維陣列名,用陣列元素的指標來接 傳二維陣列名,用一維陣列的指標來接 傳三維陣列名,用二維陣列的指標來接 傳指標陣列,用指標的指標接 關於陣列名 一維陣列...

指標(記憶體管理)

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