C语言关于栈的内存释放问题

C语言关于栈的内存释放问题,第1张

是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)

局部变量放在栈(stack)上,静态、全局、动态分配多放在堆(heap)中。动态分配的空间远远大于栈上的空间。比如你要装载一幅图到内存中进行处理,烂洞栈是肯定放不下的,只能用动态分配。因此,不要使用太大的局部数组,而尽量使物漏用动态饥蚂枯分配,最后不要忘了释放掉。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8180755.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存