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 ...