2 yzn77 yzn77 于 2016.03.20 21:07 提问

面试中遇到的指针释放问题

老师问我,为什么定义一个变量,比如int a;用完就可以不用管,但是定义一个指针,用完了却要释放空间?我的回答是,因为指针指向的是一个地址。。。被赤裸裸嘲笑。。网上百度一番,也没看出个所以然。求大神帮忙解答

7个回答

caozhy
caozhy   Ds   Rxr 2016.03.20 21:50
已采纳

因为int a定义的变量在堆栈上,堆栈在函数调用完成后自动清栈。new / malloc定义的在堆上,所以要自己释放。

qq_28896511
qq_28896511 准确来说int a;在程序的内存映像中的未初始化区域,不是在栈区或者堆区。
一年多之前 回复
lm_whales
lm_whales   Rxr 2016.03.21 00:24

1)定义一个指针并不需要释放空间

2)只有用指针接收动态分配的内存(堆空间),才需要释放空间
原因是释放空间,内存可以再次分配,循环利用。
否则,堆内存就会一直得不到回收,
这样会导致,内存各种各样的问题。

C373216951
C373216951   2016.03.20 22:39

变量a跟指针本身都在栈上,函数执行完成后操作系统自动清除了。但是指针所指的堆内存数据不会清除,必须由程序员自己释放。不清除就会造成内存泄漏。

u012155923
u012155923   2016.03.20 23:29

这道题简单看就是说指针指向一段内存,如果用完之后不去释放并指向空,则会变成野指针,而局部变量的生命周期则是与函数一致

lm_whales
lm_whales   Rxr 2016.03.21 00:24

1)定义一个指针并不需要释放空间

2)只有用指针接收动态分配的内存(堆空间),才需要释放空间
原因是释放空间,内存可以再次分配,循环利用。
否则,堆内存就会一直得不到回收,
这样会导致,内存各种各样的问题。

wangyaninglm
wangyaninglm   Ds   Rxr 2016.03.20 21:29

栈里面的东西一般不要释放吧,不知道对不对

bealing
bealing   Rxr 2016.03.20 21:49

局部变量存储在栈中,随栈的销毁而自动回收;指针指向的空间是在堆中动态分配的,不会自动回收,如果不手动释放会造成内存泄漏

Csdn user default icon
上传中...
上传图片
插入图片