问题是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);
}
答案 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