0

这是我关于堆栈溢出的第一篇文章。我正在创建一个程序来按字母顺序将文本解析为链表,并跟踪每个单词的计数。程序运行良好(我的意思是 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;
    }
4

1 回答 1

2

我敢打赌:你的析构函数很可能会调用destroyWord. 我们可以看到destroyWord有一个delete nodeD;声明。nodeD是 的 类型WordList<T>,因此这将导致对 的析构函数调用WordList<T>,并且delete nodeD;正如我们所见,它具有 a 。有我们的无限递归。

于 2013-04-13T04:36:18.670 回答