二維陣列如何申請和釋放

2021-10-03 12:37:20 字數 1043 閱讀 8789

1,二維陣列的申請

typedef struct dictht  dictht;
typedef struct dictentry  v;

struct dictentry *next;

} dictentry;

假如有這樣的乙個二維陣列,dictentry **table,如何來申請呢???

首先要明白dictentry **table 的意思,可以把它看作乙個一維的(dictentry *) *table,table時乙個陣列,裡面存放的時指標,指向的是dictentry 這種結構。

所以申請的時候分兩步:

1)為這個table一維表申請記憶體。

dictentry **table   = malloc(size * (dictentry *));

2)為這個表的每項申請記憶體,因為他們都是指標,指向結構體 dictentry。

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

table[i] = malloc(dictentry);

2,二維陣列的釋放

當釋放二維陣列的時候得和申請的順序相反,不然會造成記憶體洩露了(先把table表釋放了,僅僅是釋放這size個指標的陣列,而陣列中每項指標指向的內容未釋放)

所以釋放的步驟:

1) 釋放表中每個指標指向的內容。

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

free(table[i]);

2) 釋放table 表

free(table);

最後最好將table = null ; 避免table 有值成為野指標。

array就是(int*)*型別的指標,指向剛才那4個int*指標型別占用空間的首位址。

動態申請和釋放乙個二維陣列

動態申請乙個二維陣列也很常見,下面是常見的兩種形式。方法1 unsigned char pimg new unsigned char m for int i 0 i 方法2 unsigned char pimg new unsigned char m unsigned char arr new un...

二維陣列的申請和呼叫問題

記得在學資料結構時,寫偽 遇到二維陣列會這樣寫void fun int a,int m,int n m代表行數,n代表列數。於是在vc 中也這樣寫,想當然的以為是對的,可是編譯不通過,a是錯誤的。之前寫的程式大部分都是一維陣列 申請一維陣列int a new int 10 函式宣告void fun ...

動態申請二維陣列並釋放方法

c c 中動態開闢一維 二維陣列是非常常用的,以前沒記住,做題時怎麼也想不起來,現在好好整理一下。c 中有三種方法來動態申請多維陣列 1 c中的malloc free 2 c 中的new delete 3 stl容器中的vector 下面逐一介紹 1.動態開闢一維陣列 cpp view plain ...