next" wa-6ren">
gpt4 book ai didi

c++ - 析构函数总是命中 Null

转载 作者:行者123 更新时间:2023-11-30 03:21:44 26 4
gpt4 key购买 nike

我目前正在研究链表。尽管我似乎总是遇到同样的问题,但我让一切正常工作,无论如何,析构函数在以任何形式访问析构函数时似乎总是遇到 NULL 对象,抛出“访问权限冲突错误”

"this->next" was "0xDDDDDDDD".

struct Liste {
Liste *next;
int content;
Liste() {
content = 0;
next = nullptr;
};
~Liste() {
if (next == nullptr) {
return;
}else if (next->next == nullptr){
delete next;
return;
}else {
next->~Liste();
}
};
};

我非常不确定和好奇这个错误的来源是什么。无论我尝试在其上使用 delete 的方式如何,它总是会发生。到目前为止我找到的解决方案是:- 只需在第一个元素上调用 delete 并调用其他元素的析构函数- 尝试检查下一行是否为 Null 但它似乎根本没有将其过滤掉- 尝试迭代地完成它,但也确实遇到了归零- 尝试在一个类中实现它,它的工作和这一样好,直到我不得不实现一个删除,它遇到了完全相同的错误

我很高兴收到一些关于如何修复/避免此问题的提示,因为根本不删除它不是一个好主意,而且我完全不确定代码中究竟出了什么问题。

最佳答案

你的析构函数只需要做:

~Liste() {
delete next;
}

如果next不为null,那么delete next;会调用下一个元素的析构函数,后者又会调用析构函数下一个元素,依此类推。如果 nextnull,则 delete next; 不会执行任何操作,这很好。

关于c++ - 析构函数总是命中 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51846709/

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