这是我发布堆栈溢出的第一篇文章。我正在创建一个程序,按字母顺序将文本解析为链表,并跟踪每个单词的计数。该程序运行良好(罚款我的意思是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;
}
答案 0 :(得分:2)
我敢打赌:你的析构函数很可能会调用destroyWord
。我们可以看到destroyWord
有一个delete nodeD;
语句。 nodeD
类型为WordList<T>
,因此这会导致WordList<T>
上的析构函数调用,并且我们已经看到delete nodeD;
。我们有无限的递归。