gpt4 book ai didi

c++ - 这个geeksforgeeks trie实现是否存在内存泄漏问题?

转载 作者:行者123 更新时间:2023-12-02 09:48:24 25 4
gpt4 key购买 nike

我正在阅读geeksforgeeks_implementation_of_trie,发现未删除由TrieNode创建的new对象,在主函数中,有一个未删除的指针root:

struct TrieNode *root = getNode(); 
getNode()函数中也有未删除的指针 pNode,是否存在内存泄漏?是否应该有一个函数负责破坏由指针组成的trie树?
struct TrieNode *getNode(void) 
{
struct TrieNode *pNode = new TrieNode;
pNode->isEndOfWord = false;

for (int i = 0; i < ALPHABET_SIZE; i++)
pNode->children[i] = NULL;

return pNode;
}

最佳答案

此函数隐含一种约定,其中函数的调用者负责删除分配的TrieNode。如果调用者不遵守该契约(Contract),则只会发生内存泄漏。
由于您说过TrieNode并未在main中的任何地方删除,因此可能会泄漏。除非您发现该结构被删除的某个地方,否则会有泄漏。这就是为什么RAII如此强大的概念。如果存在一个包含所有Trie并负责节点分配和删除的TrieNode对象,那么您完全不必担心泄漏。
使调用方负责管理分配的资源很危险。不要这样
您可以辩称,如果程序足够简单以至于它所做的全部工作就是获取TrieNode,然后对其执行操作,然后退出,那么该特定实现不一定就是泄漏。在这种情况下,无论如何退出程序都会将内存释放到OS。但是,这是一个语义论点,提供示例代码来执行此操作是不好的做法,并且可能导致精通该类程序的程序员。

关于c++ - 这个geeksforgeeks trie实现是否存在内存泄漏问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62849712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com