動態儲存空間分配,未知行數二維陣列建立及記憶體釋放

2021-08-07 02:49:19 字數 1280 閱讀 4040

c++操作符new用來進行動態儲存分配或執行時儲存分配,它的值是乙個指標。

為乙個整數動態分配儲存空間,並賦初值10,如下幾種分配方法均可實現:

(1) int *y;

y=new int;

*y=10;

(2)int *y=new int;

*y=10;

(3)int *y=new int(10);

(4)int *y;

y=new int(10);

乙個長度為n的一維浮點陣列可以按如下方式建立:

float *x=new float [n];

動態分配的儲存空間不再需要時應該把它釋放,c++操作符delete用來釋放由操作符new所分配的空間。下面的語句用來釋放分配給*y和一維陣列x的空間:

delete y;

delete x;

要構造乙個numberofrows行numberofcolumns列的二維陣列,可以把它看作是由numberofrows行所構成的結構,每一行都是乙個能用new來建立的一維陣列。指向每一行的指標儲存在另乙個一維陣列中。

建立乙個二維陣列並分配記憶體空間,以及使用結束後釋放記憶體空間的**如下:

#includevoid make2darray(char ** &x, int numberofrows, int numberofcloumns)  //建立乙個char型動態二維陣列

}void delete2darray(char ** &x, int numberofrows) //釋放分配的二維陣列空間

delete x;

x = null;

}int main()

} for (i = 0;i < 2;i++) }

delete2darray(array, 2);

return 0;

}

建立二維陣列時首先分配乙個長度為所要建立的二維陣列行數的指標陣列,將其首位址儲存在x中。接著為指標陣列的每乙個元素分配乙個長度為所要建立的二維陣列列數的字元型陣列。這就完成了乙個二維陣列的建立。

在釋放二維陣列空間時,首先釋放在for迴圈中為每一行所分配的空間,然後釋放行指標所分配的空間。將指標設為null是為了防止使用者繼續訪問已被釋放的空間。

程式執行結果如下:

1     1     1

1     1     1     請按任意鍵繼續. . .

在記憶體空間觀察視窗可以發現對於建立的2行3列的二維陣列,array[0]和array[1]的值不同(即二維陣列的兩行的起始位址不同),然後每一行連續儲存其對應的3列的資料。

二維陣列動態儲存分配

為什麼要使用動態儲存分配?我想這個問題的答案可以歸結於三點 1 在定義乙個二維陣列的時候我事先並不知曉要給他分配具體多少行多少列時 2 演算法移植到晶元的時候考慮節省記憶體時 3 子函式呼叫想要很方便的傳遞二維陣列的位址時 單就第一點而言,也許有同學會問,你自己寫程式你怎麼會不知道要給他分配多少空間...

建立乙個動態空間儲存未知大小的二維陣列

在c c 中,陣列往往只能在給定大小的時候才能使用,否則就需要建立乙個足夠大的陣列進行儲存,這樣造成空間資源的浪費。標頭檔案stdlib.h 先定義乙個指標,並使用realloc malloc calloc函式來分配空間大小。realloc malloc calloc的使用請看 二維資料的儲存則需要...

二維陣列定義及動態分配空間

下面三種定義形式怎麼理解?怎麼動態分配空間?1 int ptr 2 int ptr 5 我更喜歡寫成 int prt 5 3 int ptr 5 此文引自網上,出處不詳,但是覺得非常好。略改了一點。例子 c語言 動態分配二維陣列空間 由此分配的二維陣列空間並非是連續的 可以使用m pptable r...