二維指標動態分配記憶體連續問題分析

2021-06-15 08:28:10 字數 1233 閱讀 9570

當我們定義乙個二維指標時,如果需要儲存相應的資料,就需要我們動態的分配記憶體,這時,有一點是需要注意的,分配記憶體的方法不同,記憶體的連續性也是不相同的,首先,博主先貼出測試**:

#include #include using namespace std;

#define nwidth 3

#define nheight 4

//記憶體是否連續分配問題

int main(int argc, char *argv)

{ int **p = null;

p = (int**)malloc(nwidth*sizeof(int*));

if(p == null)

return -1;

cout<

執行截圖如下:

如圖所示,兩種分配記憶體的方法都能正確的分配記憶體,但是記憶體分配的空間確實不一樣的。

分析:

第一種分配方法:

首先,是對每一行分配,也就是 nwidth 中的每乙個進行分配,所以,我們可以看到每一行的記憶體都是連續的,每乙個都佔據四個位元組

但是,為nheight分配記憶體的時候,是隨機的進行分配記憶體,所以記憶體的位置是不確定的,所以,出現了第一種情況

第二種分配方法:

首先,同樣是為 p 分配記憶體,現在 p 指向乙個位置

但是,在第二句中,我們需要注意,是直接在 p[0] 出分配了所有需要的記憶體,所以,這個時候就全部分配完了,而且由於是一次性分配記憶體,故記憶體的位址肯定是連續的,執行結果也證明了這一點

釋放記憶體的兩種情況:

第一種情況由於是兩次不同的分配記憶體,所以,在釋放記憶體的時候,我們應選擇不同的區域進行釋放。

第二種情況,只是連續呼叫兩次 malloc  ,所以,只需要連續兩次呼叫 free 即可完成釋放。

二維指標動態分配記憶體連續問題分析

當我們定義乙個二維指標時,如果需要儲存相應的資料,就需要我們動態的分配記憶體,這時,有一點是需要注意的,分配記憶體的方法不同,記憶體的連續性也是不相同的,首先,博主先貼出測試 include include using namespace std define nwidth 3 define nhe...

二維陣列動態分配記憶體

在robert sedgewick所著的algorithm in c中,把二維陣列當成陣列的陣列為它動態分配記憶體。首先,分配乙個指標的陣列,然後為每一行分配記憶體。函式定義 void malloc2d int r,int c,int size void free2d void arr,int r ...

二維陣列動態分配記憶體

對二維陣列分配動態空間 1.已知二維陣列的行 第一維 include include 已知陣列的行數 列數由終端輸入 int main void int i,j,num int a 3 已知陣列有3行 printf 請輸入二位陣列的列數 n scanf d num 列數由終端輸入 for i 0 i...