
因为栈内容没有初始化,所以访问那个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)中。动态分配的空间远远大于栈上的空间。比如你要装载一幅图到内存中进行处理,烂洞栈是肯定放不下的,只能用动态分配。因此,不要使用太大的局部数组,而尽量使物漏用动态饥蚂枯分配,最后不要忘了释放掉。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)