gpt4 book ai didi

c++ - 析构函数中的链表 RAII 代码崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 11:41:20 24 4
gpt4 key购买 nike

我试图在 RAII 精神中创建一个链接列表,但我在一个析构函数中遇到崩溃,我在其中调用了同一类对象的析构。我得到堆栈溢出,但前提是链表已填充到某个数字。代码:

struct Node
{
static int created,deleted;

Node* next;
Node () : next(NULL) { created++; }

~Node()
{
deleted++;

if(next)
delete next;
}
};

int Node::created = 0;
int Node::deleted = 0;

class LL
{
Node root;
Node* cur;

public:

LL() : cur(&root) { }

void add()
{
this->cur = this->cur->next = new Node;
}
};

现在,这段代码不会崩溃:

{
LL l;

for(int i=1;i<=1000;i++)
l.add();
}

printf("Created %d, Deleted %d\n",Node::created,Node::deleted);

但是这个确实:

{
LL l;

for(int i=1;i<=5000;i++)
l.add();
}

printf("Created %d, Deleted %d\n",Node::created,Node::deleted);

为什么会崩溃,应该如何修复?

最佳答案

让我们再试一次。

Node 的析构函数中删除指针,它调用下一个 Node 的析构函数,等等。这是递归发生的。您只是用完了堆栈空间。

关于c++ - 析构函数中的链表 RAII 代码崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21323576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com