这个程序发生了什么?

时间:2014-03-15 03:49:22

标签: c++

当我写这行时: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);



}

2 个答案:

答案 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