C ++析构函数中的堆栈溢出

Rom 4

我尝试创建这个Detor并得到一个“ Stack Overflow”,我知道为什么,但是我想要它的工作...

#include <iostream>
#include "printTreeToFile.h"
#include "BSNode.h"
#define _BS BSNode::
#define _BSNode _BS BSNode
_BS ~BSNode()
{
    Del(this);
}
void _BS Del(BSNode *x,int y)
{
    if (x->isLeaf())
    {
        delete x;
        return;
    }
    if (x->_Right != NULL)
        Del(x->_Right,y += 1);
    if (x->_Left != NULL)
        Del(x->_Left,y += 1);
    if (y != 1)
    {
        delete x;
    }
    return;
}

我尝试以递归的方式执行此操作,但对Del的删除调用使我们得到了无限循环

用户名
_BS ~BSNode()
{
    Del(this);
}

void _BS Del(BSNode *x,int y)
{
    if (x->isLeaf())
    {
        delete x;
        return;
    }
    if (x->_Right != NULL)
        Del(x->_Right,y += 1);
    if (x->_Left != NULL)
        Del(x->_Left,y += 1);
    if (y != 1)
    {
        delete x;
    }
    return;
}

您正在this递归删除您不需要所有这些。你太想了。所有你需要的是:

BSNode::~BSNode()
{
    delete _Left;
    delete _Right;
}

这将自动向左和向右子树递归,并在null处停止。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++为什么在堆栈中构造完对象后立即调用析构函数?

来自分类Dev

C ++为什么在堆栈中构造完对象后立即调用析构函数?

来自分类Dev

C ++中的析构函数直接调用

来自分类Dev

析构函数在C ++中调用向量

来自分类Dev

C ++中的循环链表的析构函数?

来自分类Dev

C ++在析构函数中杀死线程

来自分类Dev

C ++中的“隐式析构函数”

来自分类Dev

C ++中的析构函数直接调用

来自分类Dev

C ++。在析构函数中调用虚拟成员函数

来自分类Dev

C ++中的析构函数和构造函数排序

来自分类Dev

从C ++中的析构函数中恢复对象?

来自分类Dev

您是否在C ++中的析构函数中调用delete?

来自分类Dev

在C ++中的析构函数中关闭连接

来自分类Dev

C ++析构函数约定

来自分类Dev

[c ++]缺少析构函数

来自分类Dev

基于C ++堆栈的构造函数/析构函数无法按预期工作

来自分类Dev

是否可以在C ++中自动生成析构函数?

来自分类Dev

C ++ 11在派生类中删除的析构函数

来自分类Dev

在析构函数C ++中访问所有者

来自分类Dev

装饰器模式中的c ++虚拟析构函数

来自分类Dev

C ++清除类析构函数中的std :: list结构

来自分类Dev

C ++-如何在析构函数中删除子类

来自分类Dev

C ++中类析构函数的奇怪行为

来自分类Dev

C ++中的原始类型是否具有析构函数?

来自分类Dev

在C ++中调用虚拟析构函数的顺序

来自分类Dev

什么是C ++ 20中的“预期析构函数”?

来自分类Dev

C ++中的析构函数不起作用

来自分类Dev

递归函数中的堆栈溢出(语言C)

来自分类Dev

用于堆栈分配对象的C ++虚拟析构函数内联