这个错误是个典型的问题,当函数的参数是指针时,请不要试图通过指针申请到空间
因为你传入的是一个指针S,那么传入后会在函数内部局部作用域制作一个S的临时副本_S,所以当你申请动态内存时是给_S申请的,而不是S,也就是S根本就没有得到空间.S的值根本没有变
当函数执行完时由于_S没有被FREE,所以会造成内存泄露
有两种解决方法,一个是传回返回值,将函数写成
Stack* Init(Stack *S)
{
S=(Stack *)malloc(sizeof(Stack));
if(S==NULL)
{
printf("failed!\n");
}
S->top=1;
printf("***size***:%d\n",S->top);
return S;
}
void main()
{
int elem;
Stack *s;
s = Init(s);
printf("now the stack's size is:%d\n",s->top);
free(s);
}
或者是传入指向指针的指针
比如
void Init(Stack **S)
{
*S=(Stack *)malloc(sizeof(Stack));
if(*S==NULL)
{
printf("failed!\n");
}
*S->top=1;
printf("***size***:%d\n",*S->top);
}
void main()
{
int elem;
Stack *s;
Init(&s);
printf("now the stack's size is:%d\n",s->top);
free(s);
}
还有要养成malloc和free的配对关系,有多少个malloc就应该有多少个free,要不然会造成内存泄露