我們先來了解一下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)
malloc/free與new/delete的區別:class a
};void test(void)
p->func(); // p是「野指標」
}
malloc/free 的使用要點:class text
~text()
void initialize()
void destroy()
};void usemallocfree(void)
void usenewdelete(void)
int *p = (int *) malloc(sizeof(int) * length);
new/delete 的使用要點
int *p1 = (int *)malloc(sizeof(int) * length);
int *p2 = new int[length];
在用delete釋放物件陣列時,留意不要丟了符號『』。例如:class
objvoid test(void)
陣列 指標及記憶體
一 記憶體四區 a 區。存放 b 全域性區。全域性的常量 字串常量和變數 c 棧區。系統自動開闢,系統自動釋放,並不是很大。比如for迴圈中的int i 0。d 堆區。動態開闢的記憶體,手動開闢,手動釋放。大。比如自己定義的資料結構 a 編號連續 b 唯一的 c 取位址運算子 單目運算子,優先順序很...
陣列 指標和記憶體管理
關於指標 一維指標儲存基本變數的位址 二維指標儲存一維指標變數的位址 三維指標儲存二維指標變數的位址 詳解 linux c 指標 一 關於傳參 傳一維陣列名,用陣列元素的指標來接 傳二維陣列名,用一維陣列的指標來接 傳三維陣列名,用二維陣列的指標來接 傳指標陣列,用指標的指標接 關於陣列名 一維陣列...
指標(記憶體管理)
直接上總結 四種指標 前倆種是泛型 後倆種是普通的指標 unsafepointer unsafemutablepointer unsaferawpointer unsafemutablerawpointer 簡單示例 一 1.泛型指標示例 2.普通指標示例 3.應用示例 獲得變數的指標 二 1.示例...