这是我关于堆栈溢出的第一篇文章。我正在创建一个程序来按字母顺序将文本解析为链表,并跟踪每个单词的计数。该程序运行良好(我的意思是 15 分钟,这显然很慢并且没有使用强大的数据结构),直到我的程序返回并尝试解构动态分配的内存。有人可以帮助确定我可能需要调整这段代码的哪些部分以避免溢出我的堆栈吗?
template <class T>
void WordList<T>::destroyWord(WordList<T> *node)
{
WordList<T>* nodeD = NULL;
for(; node != NULL; )
{
if(node == NULL)
return;
else if(node->mNext != NULL)
{
nodeD = node;
node = node->mNext;
}
else
{
// We have found the node to delete.
//destroyWord(node->mNext);
if( node->mNext == NULL )
{
if( nodeD != NULL )
{
nodeD->mNext = NULL;
delete nodeD;
}
else
{
node = NULL;
}
}
nodeD = NULL;
}
}
// **********************************
// Delete the node at the root.
//delete node;
return;
}
这是我修改后的代码,谢谢大家!....
template <class T>
void WordList<T>::destroyWord(WordList<T> *node)
{
node = node->mRootNode->mNext;
static WordList<T>* ptr = node;
for(; node != NULL && node->mNext != NULL; )
{
ptr = node->mNext;
delete (char*)node;
node = ptr;
}
delete (char*)ptr;
}
最佳答案
我敢打赌:你的析构函数很可能会调用 destroyWord
.我们可以看到 destroyWord
有一个 delete nodeD;
陈述。 nodeD
是 WordList<T>
的类型,因此这将导致对 WordList<T>
的析构函数调用,并且有一个 delete nodeD;
正如我们所看到的。这就是我们的无限递归。
关于c++ - 堆栈溢出与我的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15983513/