[英]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? 我嘗試了以下方法( tail
是nodes_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.