deletecinvoidinsert()打印无限数,如果我将其注释掉,我会得到正确的输出
这个程序在 cpp 中创建并打印一个链接列表 当这个程序运行一个无限的 no。的数字开始在控制台打印
#include <cstdlib>
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node* next;
};
class Node* head = NULL;
int length = 0;
在这个函数中,如果我注释掉 delete c 那么它就起作用了,我不知道为什么 delete c 会导致问题
void insert(int data) {
class Node* newNode = NULL;
newNode = new Node();
newNode->data = data;
newNode->next = NULL;
if(head == NULL) {
head = newNode;
length++;
}
else {
class Node* c = head;
while(c->next != NULL) {
c = c->next;
}
c->next = newNode;
length++;
delete c;
}
}
这里 delete c 没有问题
void print() {
class Node* c = head;
while(c != NULL) {
cout<<c->data<<endl;
c = c->next;
}
cout<<"Length of link list = "<<length<<endl;
delete c;
}
主功能
int main() {
cout<<"Hello Wrold"<<endl;
insert(5);
insert(10);
insert(15);
insert(20);
print();
getchar();
return 0;
}
回答
在您的insert函数中,循环条件是c->next != NULL。因此c在循环后指向一个正在使用的节点,并delete c;破坏该节点并造成麻烦。
另一方面,print函数中的循环条件是c != NULL。因此c将NULL在循环之后并且delete c;不会造成麻烦,因为删除NULL被定义为什么都不做。
THE END
二维码