三、動態記憶體分配
阿新 • • 發佈:2022-05-13
1、用new 運算子實現動態記憶體分配
- 第一種用法,分配一個變數:
P = new T;
T是任意型別名,P是型別為T * 的指標。
動態分配出一片大小為 sizeof(T)位元組的記憶體空間,並且將該 記憶體空間的起始地址賦值給P。
比如:
int * pn; pn = new int; * pn = 5;
- 第二種用法,分配一個數組:
P = new T[N];
T :任意型別名, P :型別為T * 的指標 ,N :要分配的陣列元素的個數,可以是整型表示式
動態分配出一片大小為 sizeof(T)*N位元組的記憶體空間,並 且將該記憶體空間的起始地址賦值給P。
例題:
int * pn; int i = 5; pn = new int[i * 20]; pn[0] = 20; pn[100] = 30; //編譯沒問題。執行時導致陣列越界
2、用delete運算子釋放動態分配的內
- 用“new”動態分配的記憶體空間,一定要用 “delete”運算子進行釋放
delete 指標;//該指標必須指向new出來的空間
int * p = new int; * p = 5; delete p; delete p; //導致異常,一片空間不能被delete多次
- 用“delete”釋放動態分配的陣列,要加“[]”
delete [ ] 指標;//該指標必須指向new出來的陣列
int * p = new int[20]; p[0] = 1; delete [ ] p;