動態記憶體的管理 C++中除了相容C的管理方式外,還額外提供了兩個運算符(不是函數)來管理動態記憶體: new 主要用於申請動態記憶體 delete 主要用於釋放動態記憶體 Note: 1. 運算符VS函數,運算符不需要找庫,直接被編譯器內部支持 2. 將指針置為空指針可以避免多次delete所引起的cor ...
動態記憶體的管理
C++中除了相容C的管理方式外,還額外提供了兩個運算符(不是函數)來管理動態記憶體:
- new 主要用於申請動態記憶體
- delete 主要用於釋放動態記憶體
Note:
- 運算符VS函數,運算符不需要找庫,直接被編譯器內部支持
- 將指針置為空指針可以避免多次delete所引起的core dumped的錯誤信息
例子1
使用new運算符實現定位分配
#include<iostream>
using namespace std;
int main(void){
short buf[2]={0}; //在stack區申請了4byte大小的空間
//pi指向堆區,pi本身在棧區
int* pi=new int(66);
cout<<"*pi="<<*pi<<endl; //66
delete pi;
pi=NULL;
//使用new運算符實現定位分配的效果
pi=new(buf)int(0x12345678);
//delee\te pi;segmentatiob c
}
例子2
定義二維數組的首地址:
int (*ai)[3]=new int[2][3];
for(int i=0;i<2;i++){
for(int j=0;i<3;j++)
cout<<"ai["<<i<<"]["<<j<<"]"<<ai[i][j]<<endl;
}
delete[] ai; // 連續的調用析構
Note:
- malloc()申請的動態記憶體,free()釋放,new 申請的動態記憶體, delete釋放,切記不要交叉使用
- 二維數組的首地址是第一個元素的地址,所以應該使用一級指針接收,絕不能用二級指針!!!