c++ - 堆栈溢出与我的析构函数

标签 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;
    }

最佳答案

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

关于c++ - 堆栈溢出与我的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15983513/

相关文章:

c++ - 如何从 C++ 中的二进制文件中读取一位?

C++编译器如何处理模板

java - 为什么我无法访问在构造函数(Java)中创建的类的实例

c++ - 对构造函数的调用不能出现在常量表达式中

c++ - 相同模板类但不同模板类型的 protected 成员

c++ - 如何永久删除 vector 的成员?

c++ - 为什么 protobuf 只读取最后一条消息作为输入结果?

python - 当相邻列包含特定值时,如何从数据框中为每个 ID 解析数据?

用于在符号处按行分割 JSON 文本的 Java 例程

c++ - 如何创建一个类对象数组,其构造函数只需要很少的参数?