堆栈溢出我的析构函数

时间:2013-04-13 02:18:45

标签: c++ parsing constructor linked-list

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

1 个答案:

答案 0 :(得分:2)

我敢打赌:你的析构函数很可能会调用destroyWord。我们可以看到destroyWord有一个delete nodeD;语句。 nodeD类型为WordList<T>,因此这会导致WordList<T>上的析构函数调用,并且我们已经看到delete nodeD;。我们有无限的递归。