使用C的堆栈链表的pop()方法有错误

时间:2018-06-17 08:34:40

标签: c data-structures linked-list stack

问题是printf() pop()方法显示奇怪的地址,不再运行了。打印结果如下。

push (10)
push (20)
push (30)
push (40)
40
-842150451

这是整个代码。

#include <stdio.h>
#include <stdlib.h>

typedef struct node{
    int data;
    struct node *next;
}node;

node* head = NULL;

void init(){
    head = (node*)malloc(sizeof(node));
    head->data = 0;
    head->next = NULL;
}

void push(int data){

    node* temp = (node*)malloc(sizeof(node));
    if(temp == NULL){
        printf("Out Of Memory");
    }else{
        head = (node*)malloc(sizeof(node));
        temp->data = data;
        temp->next = head;
        head = temp;
        printf("push (%d)\n", data);
    }
}

void pop(){
    node* temp;
    if(head == NULL) return;
    temp = head;
    printf("%d\n", head->data);
    head = head->next;
    free(temp);
}

void main(){

    push(10);
    push(20);
    push(30);
    push(40);

    pop();
    pop();
    pop();
    pop();
}

并且此pop方法不起作用。 它第一次显示40。

然后打印-842150451。 我不明白为什么我收到这个奇怪的号码。

void pop(){
    node* temp;
    if(head == NULL) return;
    temp = head;
    printf("%d\n", head->data);
    head = head->next;
    free(temp);
}

1 个答案:

答案 0 :(得分:2)

你在push()中有一个奇怪的,额外的malloc,我摆脱了它,事情看起来好多了:

void push(int data) {

    node* temp = (node*)malloc(sizeof(node));
    if (temp == NULL) {
        printf("Out Of Memory");
    } else {
        //head = (node*)malloc(sizeof(node));     <---- this is your problem
        temp->data = data;
        temp->next = head;
        head = temp;
        printf("push (%d)\n", data);
    }
}


push (10)
push (20)
push (30)
push (40)
40
30
20
10