C 學習筆記 動態分配記憶體

2021-10-12 06:12:45 字數 1518 閱讀 3983

在c語言中,動態分配記憶體時一般使用malloc()函式,但是對於非內建資料型別(如struct,enum,class等),malloc()與free()無法滿足動態物件的需求,因此c++引入new與delete關鍵字,用來進行記憶體申請與釋放空間。

下面是使用 new 運算子來為任意的資料型別動態分配記憶體的通用語法:

new data-type;(new資料型別(初始化列表));

我們知道,malloc()函式申請記憶體時返回的是乙個void*型別的指標,而new直接分配乙個儲存空間,並且指定了型別資訊,並且根據初始化列表中給出的值進行初始化,是直接可以使用的記憶體。而且new動態建立物件時是不必為該物件命名,直接指定資料型別就行。如果記憶體申請成功,返回乙個型別指標;如果記憶體申請失敗,則返回null

例子:

char *pc = new char; //申請一段空間用來儲存char型別,記憶體中沒有初始化

int *pi=new int(10); //申請一段空間用來儲存int型別,初始化為10

double *pd = new double(); //申請一段空間用來儲存double型別的資料,預設初始值為0

上述**中分別用new建立了pc,pi , pd 三個物件 ,其中pc沒有初始化列表,新分配記憶體沒有初始值;pi與pd如注釋

new也可以用來建立陣列物件,其語法格式如下:new資料型別[陣列長度];

new陣列時,後面可以加小括號(),但括號中不可以指定任何初始值,加小括號時由編繹器為其提供預設初始值,而不加小括號時不提供任何初始值。

其示例**如下:

int *pi=new int[10] (); //pi所指的陣列中10個元素初始化為0;0為預設初始值

char *pc= new char [10]; //pc所指的陣列中沒有提供初始值

double *pd =new double [0]; //pd是乙個長度為0的·陣列。這是合法的

在任何時候,當您覺得某個已經動態分配記憶體的變數不再需要使用時,您可以使用 delete 操作符釋放它所占用的記憶體,如下所示:

delete pvalue; // 釋放 pvalue 所指向的記憶體

直接作用於指標就可以刪除由new建立的物件,釋放指標所指向的記憶體空間。

delete 指標名字

但在釋放陣列物件時要在指標名前加上,其格式如下:delete指標名;

delete 指標名字

例子:

#include 

using namespace std;

int main(

)執行結果

*pi=10

*pi=20

a b c d e f g h i j

請按任意鍵繼續. .

.

動態分配記憶體(學習筆記11)

函式原型 stdlib.h void malloc size 分配size大小的記憶體,返回指向所分配記憶體的指標,分配不成功,返回null void calloc num element,length of element 分配num element length of element 大小的記憶...

C 學習筆記 動態分配記憶體空間

我們在c語言中學過malloc函式,來動態分配記憶體空間,然而在c 中我們用的是new運算子。強調一下,malloc 是函式。而new是運算子,和sizeof 不是函式乙個意思。我們首先來看看malloc函式。查閱msdn void malloc size t size 可以看出,函式返回的是乙個指...

記憶體動態分配

陣列的元素儲存於記憶體中連續的位置上。當乙個陣列被宣告時,它所需要的內存在編譯時就被分配。但是,你也可以使用動態記憶體分配在執行時為它分配記憶體。malloc所分配的是一塊連續的記憶體。例如,如果請求它分配100個位元組的記憶體,那麼它實際分配的記憶體就是100個連續的位元組,並不會分開位於兩塊或多...