1,二維數組的申請
typedef struct dictht {
dictEntry **table;
unsigned long size;
unsigned long sizemask;
unsigned long used;
} dictht;
typedef struct dictEntry {
void *key;
union {
void *val;
uint64_t u64;
int64_t s64;
double d;
} 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 有值成爲野指針。