求解关于C语言的释放内存问题?
发布网友
发布时间:2022-04-29 11:33
我来回答
共2个回答
热心网友
时间:2022-06-27 00:18
是InitStack(s)吧?程序里就没有InitSqlist()。
因为栈内容没有初始化,所以访问那个s->top时就出错了,并不是分配内存的malloc的问题。
把主函数里这两行改一下:
Stack *s; /* 这里没有给s分配内存,这只是一个Stack的指针*/
InitStack(s);
改为:
Stack s; /* 这样就给s分配空间了, s.top现在就可以用了*/
InitStack(&s);
这个问题就好了。
相应地,以后使用栈时注意使用指针就好:
ShowStack(s);
改为
ShowStack(&s);
还有一种做法,就是在:
Stack *s;
InitStack(s);
中间给指针s分配内存,让指针s指向正确的结构:
Stack *s;
s = (Stack*)malloc(sizeof(Stack));
InitStack(s);
热心网友
时间:2022-06-27 00:18
可以释放p。
free(r)释放的是指针r指向的内存,因为r和p指向同一块内存,所以释放r就相当于释放了p。