※ 引述《youtuuube000 (小孩)》之铭言:
: 开发平台(Platform): (Ex: Win10, Linux, ...)
: linux
: 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
: GCC
: 额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
: 无吧(?
: 问题(Question):
: 各位好
: 我想要问一下
: 若在一般function宣告变量的话(e.q. int a=0;)
: 我知道随着function结束执行return后 变量的内存也就会被释放了
这是因为function被呼叫时,这些变量会被push到stack里
而return后,则会被pop出来,也就是你所说的被释放
: 但若是在main里面宣告的话
: 此变量不就会一直保留着他的内存
: 而要等到程式结束后他才会被清空吗?
是的,这是因为main本身也是一个function
只是他是第一个被呼叫的function
所以他最后才被pop,也就是你所说的程式结束
这是stack的特性,先进后出
: 但为什么一般都没有设计清空在main里面宣告变量内存的机制呢?
会清空啊
同上所述,因为main是function,当他被return时
所有宣告的变量就会被pop出来
: 但malloc却一定要强调要用free来清空呢?
: malloc宣告的变量不也会随着程式结束后就被清空了吗?
: 为什么要强调一定要用free呢?
不是喔,malloc的变量不会随着程式结束被清掉
如果没有free掉,他会一直占著内存,直到你重开机
而malloc的变量存放的地方称作heap
建议你找本资料结构的书,看一下什么是stack跟heap
就会有概念了
: 我知道在其他function定义的malloc一定要用free不然会有memory leak
: 但在main里面宣告的malloc的变量都要强调要用free
: 为什么int a=0;在main里面却不用释放内存呢?
: 先谢谢回答了