new與delete申請記憶體

2021-07-14 07:25:50 字數 1184 閱讀 1351

malloc申請而來的只是記憶體,嚴格地說並不是「物件」,new/delete的引用就是要解決malloc帶來的問題

//4個int,16個位元組

int *p=(int *)malloc(16);

for(int i=0;i<4;i++)

在c++中,用new/delete操作符取代malloc/free

申請乙個物件:

int * p=new

int;

釋放

delete p;
注意:

1. new的返回值直接就是物件指標,不用再轉換

2. new的時候可以設初始值 new int(12);

申請多個物件

//申請1024個int物件

int *p=new

int [1024];

delete p;

注意:

1. 用指定物件個數

2. 如果new的時候用了,則釋放的時候使用delete 操作符

例子:

申請乙個student物件大小的空間

struct student

student *s=new student;

s->id=12;

strcpy(s->name,"dadi");

//用完之後,釋放

delete s;

使用原則:

使用原則與malloc/free類似,都是向記憶體管理器mm來申請記憶體。

1. 用new申請的記憶體,必須用delete釋放

2. 用new申請的記憶體,必須使用delete 釋放

3. 用完之時,及時釋放

注意:

和free一樣,delete之後指標所指向的記憶體不再可用

delete p;

p = null;//最好置為空指標

問題:delete p之後,p的值會發生改變嗎?

答案:不會發生變化,還是指向這記憶體,只是不是我們所用

new 與malloc申請記憶體區別

首先我們需要了解堆與棧的概念。區分堆記憶體與棧記憶體的區別。以及堆與棧訪問速度的差異的原因。1.屬性 new delete是c 關鍵字,需要編譯器支援。malloc free是庫函式,需要標頭檔案支援。2.引數 使用new 操作副申請記憶體分配時無須制定記憶體塊的大小,編譯器會根據型別資訊自行計算。...

new和delete分配記憶體

一.當記憶體用完時 當找不到足夠大的連續的記憶體塊用於存放物件時,乙個稱為new handler的函式被呼叫,或者檢查指向函式的指標,如果非0,則那個函式被呼叫 new handler的預設動作是丟擲乙個異常。通過包含new.h,然後以我們想呼叫的函式位址為引數,呼叫set new handler ...

delete釋放new 開闢的記憶體

直接看下面這道題 使用 char p new char 10 申請一段記憶體,然後使用delete p釋放,有什麼問題?a 會有記憶體洩露 b 不會有記憶體洩露,但不建議用 c 編譯就會報錯,必須使用delete p d 編譯沒問題,執行會直接崩潰 這道題題目開闢的是10個char型別的空間,因為是...