当我写这行时:cout<< “请在这里看看”;在函数'insert'程序中,程序给出了这个输出:1 0但是当擦除行时程序给我这个输出:1 2。 为什么会这样?
#include <iostream>
using namespace std;
struct Node{
int data;
Node* next;
};
void initNode(struct Node *head, int n){
head->data = n;
head->next = NULL;
}
void insert(struct Node *head,int n){
Node no;
Node *novo = &no;
novo->data = n;
novo->next = NULL;
Node *cur = head;
while(cur){
if(cur->next == NULL){
cur->next = novo;
return;
}
cout<< "LOOK AT HERE PLEASE";
cur = cur->next;
}
}
void display(struct Node *head){
Node *list = head;
while(list){
cout<<list->data<< " "<<endl;
list = list->next;
}
cout<<endl<<endl;
}
int main(){
Node head;
initNode(&head,1);
insert(&head,2);
display(&head);
}
答案 0 :(得分:1)
更改
Node no;
Node *novo = &no;
要
Node *novo = new Node;
堆叠上的东西寿命很短。
然后你需要弄清楚如何防止内存泄漏(delete
它在某处!)
答案 1 :(得分:1)
您在以下代码中所做的工作
void insert(struct Node *head,int n){
Node no;
Node *novo = &no;
...
Node *cur = head;
while(cur){
if(cur->next == NULL){
cur->next = novo;
return;
}
返回一个指向局部变量的指针,这是一种未定义的行为。
你可以修复它,正如@ ed-heal已经指出的
Node *novo = new Node;
将动态分配Node
。