下面是正确的代码 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct node{ 5 int value; 6 struct node *next; 7 }; 8 9 struct node *push(struct node *stack,int value); 10 struct node *pop(struct node *stack, int *value); 11 struct node *stack; 12 13 int main(){ 14 int v; 15 printf("please input 0 to end/n"); 16 scanf("%d",&v); 17 while(v != 0){ 18 stack = push(stack,v); 19 scanf("%d",&v); 20 } 21 while(stack != NULL){ 22 stack = pop(stack, &v); 23 printf("%d/t",v); 24 } 25 } 26 27 struct node *push(struct node *stack, int value){ 28 struct node *newlink; 29 newlink = (struct node *)malloc(sizeof(struct node)); 30 if(newlink == NULL){ 31 printf("alloc memory failed"); 32 exit(0); 33 } 34 newlink->value = value; 35 newlink->next = stack; 36 stack = newlink; 37 return stack; 38 } 39 40 struct node *pop(struct node *stack, int *value){ 41 struct node *top; 42 if(stack != NULL){ 43 top = stack; 44 stack = stack->next; 45 *value = top->value; 46 free(top); 47 return stack; 48 }else{ 49 *value = -1; 50 } 51 } 52 下面是错误的代码,编译后执行时会出现core dump错误 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct node{ 5 int value; 6 struct node *next; 7 }; 8 9 struct node *push(struct node *stack,int value); 10 struct node *pop(struct node *stack, int *value); 12 13 int main(){ 14 int v; struct node *stack; 15 printf("please input 0 to end/n"); 16 scanf("%d",&v); 17 while(v != 0){ 18 stack = push(stack,v); 19 scanf("%d",&v); 20 } 21 while(stack != NULL){ 22 stack = pop(stack, &v); 23 printf("%d/t",v); 24 } 25 } 26 27 struct node *push(struct node *stack, int value){ 28 struct node *newlink; 29 newlink = (struct node *)malloc(sizeof(struct node)); 30 if(newlink == NULL){ 31 printf("alloc memory failed"); 32 exit(0); 33 } 34 newlink->value = value; 35 newlink->next = stack; 36 stack = newlink; 37 return stack; 38 } 39 40 struct node *pop(struct node *stack, int *value){ 41 struct node *top; 42 if(stack != NULL){ 43 top = stack; 44 stack = stack->next; 45 *value = top->value; 46 free(top); 47 return stack; 48 }else{ 49 *value = -1; 50 } 51 } 52 我找到了错误所在就是因为将 struct node *stack;放到了main的函数体呢,但是我现在还没想出来为什么。