1. 程式人生 > 其它 >三、動態記憶體分配

三、動態記憶體分配

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;