在gcc 4.7环境下写了一个简单的链表表示栈的结构,如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode;
//初始化链栈
void initStack(Lnode *ln){
ln=(Lnode *)malloc(sizeof(Lnode));
if(ln == NULL){
printf("error");
}
ln->next=NULL;
}
//判断链栈是否为空
int StackEmpty(Lnode *ln){
return (ln->next==NULL?1:0);
}
//进栈
void push(Lnode *ln,int x){
Lnode *p;
p=(Lnode *)malloc(sizeof(Lnode));
if(p ==NULL){
printf("ERROR");
exit(0);
}
p->next=NULL;
p->data=x;
p->next=ln->next;
ln->next=p;
}
//出栈
int pop(Lnode *ln,int *x){
Lnode *p=ln->next;
if(p ==NULL){
return 0;
}
*x=p->data;
ln->next=p->next;
free(p);
return 1;
}
void printStack(Lnode *ln){
Lnode *p=ln->next;
while((p->next)!=NULL){
printf("%d\n",p->data);
p=p->next;
}
}
int main(void){
Lnode ln;
int x;
initStack(&ln);
push(&ln,2);
push(&ln,3);
push(&ln,4);
push(&ln,5);
pop(&ln,&x);
printf("出栈元素为:%d\n",x);
printStack(&ln);
return 0;
}
但是在执行initStack函数的ln->next=NULL之后变量的值并没有指向应该的0x0,而是0x39.
如图:
这个问题很严重,导致程序后面执行循环时指针访问到不确定的位置报错
是什么原因呢