问题描述
- 面试中遇到的指针释放问题
-
老师问我,为什么定义一个变量,比如int a;用完就可以不用管,但是定义一个指针,用完了却要释放空间?我的回答是,因为指针指向的是一个地址。。。被赤裸裸嘲笑。。网上百度一番,也没看出个所以然。求大神帮忙解答
解决方案
因为int a定义的变量在堆栈上,堆栈在函数调用完成后自动清栈。new / malloc定义的在堆上,所以要自己释放。
解决方案二:
1)定义一个指针并不需要释放空间
2)只有用指针接收动态分配的内存(堆空间),才需要释放空间
原因是释放空间,内存可以再次分配,循环利用。
否则,堆内存就会一直得不到回收,
这样会导致,内存各种各样的问题。
解决方案三:
变量a跟指针本身都在栈上,函数执行完成后操作系统自动清除了。但是指针所指的堆内存数据不会清除,必须由程序员自己释放。不清除就会造成内存泄漏。
解决方案四:
这道题简单看就是说指针指向一段内存,如果用完之后不去释放并指向空,则会变成野指针,而局部变量的生命周期则是与函数一致
解决方案五:
1)定义一个指针并不需要释放空间
2)只有用指针接收动态分配的内存(堆空间),才需要释放空间
原因是释放空间,内存可以再次分配,循环利用。
否则,堆内存就会一直得不到回收,
这样会导致,内存各种各样的问题。
解决方案六:
栈里面的东西一般不要释放吧,不知道对不对
解决方案七:
局部变量存储在栈中,随栈的销毁而自动回收;指针指向的空间是在堆中动态分配的,不会自动回收,如果不手动释放会造成内存泄漏
时间: 2024-12-19 05:06:50