C++動態(tài)內(nèi)存分類(new/delete)

使用new運算符分配一個變量

格式:

P = new T;

其中T是任意類型名,P是類型為T*的指針。

使用該表達(dá)式動態(tài)分配出一片大小為sizeof(T)字節(jié)的內(nèi)存空間。并且將該內(nèi)存空間的其實地址賦值給P。

例如:

#include<iostream>
using namespace std;
int main() {
    int* p = new int;
    *p = 5;
    return 0;
}

在上述程序中,為p動態(tài)分配了sizeof(int)大小的空間,并將起始地址賦值給了p

使用new運算符分配一個數(shù)組

格式:

P = new T[N];

其中T是任意類型名,P是類型為T*的指針,N是要分配的數(shù)組元素的個數(shù),N可以是表達(dá)式。

使用該表達(dá)式動態(tài)分配出N*sizeof(T)字節(jié)的內(nèi)存空間,并將起始地址瀆職給P。

例如:

#include<iostream>
using namespace std;
int main() {
    int* p = new int[10];
    p[0] = 1;
    p[9] = 10;
    p[10] = 10;//越界
    return 0;
}

在上述程序中,為p動態(tài)分配了10 * sizeof(int)大小的空間,并將起始地址賦值給了p。

為數(shù)組分配完空間后就可以像訪問數(shù)組一樣訪問該指針。但是需要注意的是在執(zhí)行p[10] = 10;時會導(dǎo)致數(shù)組越界,編譯器又可能不會報錯。

使用delete運算符釋放動態(tài)分配的內(nèi)存

使用new運算符動態(tài)分配的內(nèi)存空間,一定要使用delete運算符進(jìn)行釋放。

delete變量

格式:

delete 指針;//該指針必須指向new出來的空間

例如:

#include<iostream>
using namespace std;
int main() {
    int* p = new int;
    delete p;
    delete p;//報錯,只能delete一次
    return 0;
}

在使用delete時只能對同一片空間使用一次delete,否則將會報錯,如上程序所示。

delete數(shù)組

格式:

delete []指針;//該指針必須指向new出來的空間

使用delete釋放動態(tài)分配的數(shù)組時,要添加[]。

例如:

#include<iostream>
using namespace std;
int main() {
    int* p = new int[10];
    delete []p;
    delete p;//錯誤,只會釋放第一個元素的空間
    return 0;
}

使用delete []p;來正確釋放動態(tài)分配的內(nèi)存空間,指針前有[]符;當(dāng)使用delete p;時,將導(dǎo)致該數(shù)組的首元素空間被釋放,而其余空間未被釋放,形成“野指針”。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容