c++ - 递归导致程序崩溃,但 while 循环中的相同概念并非来自 C++ 析构函数
问题描述
我正在创建一个链表类,删除链表导致我的程序崩溃,但我不明白为什么即使我在调试模式下逐行跟踪它。
在主要方法中,我创建列表并实例化值:
List list = List(new Node(rand()));
while (list.size < 10000)
{
list.add(rand());
}
该列表接收一个 Node 指针并分配给一个名为 head 的成员 Node 指针。该节点还有另一个成员变量,它是一个称为 size 的整数。
然后在方法结束时调用 list 的析构函数:
~List()
{
delete head;
}
并且该析构函数正在调用头节点的析构函数,即:
~Node()
{
delete next;
}
每个节点都有一个名为 next 的 Node 指针,它指向列表中的下一个节点,如果它是终止删除调用的结尾,则指向 nullptr。
最让我困惑的是,这确实适用于 2000 年以下的所有值,但是,在 2000 年的某个时间点,它会导致程序崩溃。
当我将 Node 析构函数留空并将 List 析构函数更改为:
~List()
{
while (head)
{
Node* temp = head->next;
std::cout << head->value << std::endl;
delete head;
head = temp;
}
size = 0;
}
该程序正在运行,它正在摆脱链表中的所有节点。据我所知,我正在应用相同的原理,所以递归调用所以我不知道是什么导致了崩溃。
节点结构:
int value;
Node* next;
Node(int val, Node* node = nullptr)
{
value = val;
next = node;
}
~Node()
{
//delete next;
}
列表结构:
Node* head;
int size;
List(Node* val)
{
head = val;
size = 1;
}
~List()
{
//delete head;
while (head)
{
Node* temp = head->next;
std::cout << head->value << std::endl;
delete head;
head = temp;
}
size = 0;
}
void add(int value)
{
head = new Node(value, head);
size++;
}
解决方案
该程序是正确的并且不是格式错误的。
问题来自内存限制。
一种“解决方法”是通过迭代手动处理内存。
推荐阅读
- android - 是否可以使用 react-native 创建浮动小部件/按钮
- python - 为包含 _dopostback 方法的多个页面抓取网站,并且页面的 URL 不会更改
- html - 如何在一行中对齐两个 flex 内容?
- javascript - 你如何在 React Bootstrap 的表上使用条件来动态渲染类?
- python - 使用 Python 的狄拉克 Delta 函数
- google-cloud-platform - 在创建机器类型 n1-standard-1 的集群时出现问题?
- java - 如何在 Firebase 数据中进行算术运算?
- javascript - 如何获得发送请求的进度百分比?axios
- javascript - nodejs - 错误:将 ECONNREFUSED 127.0.0.1:80 与 http-proxy 模块连接
- single-sign-on - 从主机访问 windows server 12 r2 adfs