C 動態記憶體

2022-01-28 16:56:51 字數 1541 閱讀 5894

c++ 程式中的記憶體分為兩個部分

a.棧:在函式內部宣告的所有變數都將占用棧記憶體。

b.堆:這是程式中未使用的記憶體,在程式執行時可用於動態分配記憶體。

1.new 運算子

為給定型別的變數在執行時分配堆內的記憶體,返回所分配的空間位址。

檢查 new 運算子是否返回 null 指標,並採取以下適當的操作:

double* pvalue  =null;

if( !(pvalue = new

double

))

注意:關於malloc()函式:malloc() 函式在 c 語言中就出現了,在 c++ 中仍然存在,但建議盡量不要使用 malloc() 函式。

new不僅分配了記憶體,還建立了物件。

2.delete 運算子

釋放它所占用的記憶體

#include using

namespace

std;

intmain ()

3.陣列的動態記憶體分配

a.一維陣列

char* pvalue  = null;   //

初始化為 null 的指標

pvalue = new

char[20]; //

為變數請求記憶體

//動態分配,陣列長度為 m

int *array=new

int[m];

//釋放記憶體

delete array;

b.二維陣列(特別注意,二維陣列刪除時需要按維度刪除)

int **array

//假定陣列第一維長度為 m, 第二維長度為 n

//動態分配空間

array = new

int *[m];

for( int i=0; i)

//釋放

for( int i=0; i)

delete array;

c.三維陣列(同二維)

int ***array;

//假定陣列第一維為 m, 第二維為 n, 第三維為h

//動態分配空間

array = new

int **[m];

for( int i=0; i)}//

釋放for( int i=0; i)

delete

array[i];

}delete array;

d.物件記憶體分配

分配方式相同,只是刪除時需要注意。

delete ptr //代表用來釋放記憶體,且只用來釋放ptr指向的記憶體。

delete rg // 用來釋放rg指向的記憶體,還逐一呼叫陣列中每個物件的 destructor!!

int/char/long/int*/struct 等等簡單資料型別,由於物件沒有 destructor,所以用 delete 和 delete 是一樣的!

C 動態記憶體

了解動態記憶體在 c 中是如何工作的是成為一名合格的 c 程式設計師必不可少的。c 程式中的記憶體分為兩個部分 很多時候,您無法提前預知需要多少記憶體來儲存某個定義變數中的特定資訊,所需記憶體的大小需要在執行時才能確定。在 c 中,您可以使用特殊的運算子為給定型別的變數在執行時分配堆內的記憶體,這會...

C 動態記憶體

棧 在函式內部宣告的所有變數都將占用棧記憶體 堆 這是程式中未使用的記憶體,在程式執行時可用於動態分配記憶體 new和delet運算子 動態分配記憶體的通用語法 new data type 如果自由儲存區已被用完,可能無法成功分配記憶體。所以建議檢查 new 運算子是否返回 null 指標,並採取以...

C 動態記憶體

到目前為止,我們的程式中我們只用了宣告變數 陣列和其他物件 objects 所必需的記憶體空間,這些記憶體空間的大小都在程式執行之前就已經確定了。但如果我們需要記憶體大小為乙個變數,其數值只有在程式執行時 runtime 才能確定,例如有些情況下我們需要根據使用者輸入來決定必需的記憶體空間,那麼我們...