二維數組如何申請和釋放

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 有值成爲野指針。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章