簡體   English   中英

如何在C++中刪除由動態分配的數組成員組成的動態分配的結構?

[英]How to delete dynamically allocated struct consisting dynamically allocated array member in C++?

我正在做作業,這要求我在不使用向量的情況下實現特里樹。 我有一個定義如下的struc

typedef struct{
    char _name;
    int32_t * _children;
    int32_t _children_size;
    int32_t _children_capacity;
    int32_t * _location;
    int32_t _location_size;
    int32_t _location_capacity;
} TrieTreeNode;

為了減少內存使用,我將TrieTreeNode所有指針存儲到一個全局變量TrieTreeNode ** nodes_array 那么每個TrieTreeNode_children成員只是一個數組,其元素是到nodes_array int32_t索引。

例如,假設我們有TrieTreeNode * parent 為了訪問它的第一個孩子,我們使用nodes_array[parent -> _children[0]]

我的問題是如何刪除整個 Trie Tree? 我嘗試了以下方法( tailnodes_array具有的指針nodes_array ):

void delete_node(TrieTreeNode *node){
    delete [] node -> _children;
    delete [] node -> _location;
}

void delete_tree(){
    for (int i = 0; i < tail; i++){
        delete_node(nodes_array[i]);
    }
    delete [] nodes_array;
    nodes_array = NULL;
}

但是,當我同時使用-ps -l命令和 GDB 來監視我的程序在刪除樹之前和之后的內存使用情況時,內存只減少了一點點。 RRS 從 13744 變為 13156,而在我構建樹之前只有 1072。

任何建議將不勝感激!

您不是刪除節點,而是刪除每個節點內的指針。

考慮一下:

void delete_tree(){
    for (int i = 0; i < tail; i++){
        delete_node(nodes_array[i]);
        delete node_array[i];  // Delete the node itself.
    }
    delete [] nodes_array;
    nodes_array = NULL;
}

在調用delete_node釋放每個節點中的兩個指針后,您應該刪除節點本身delete node_array[i]以釋放每個節點的剩余內存。

不過,就我個人而言,我很喜歡為結構定義構造函數和析構函數,這樣我就不必記住在創建它們的任何地方進行初始化,或者在我可能處理的任何地方進行額外的刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM