hur.cn - 华软网

 热门搜索

有个指针的很简单问题,哪个语句要手动释放内存?

  作者:未知    来源:网络    更新时间:2011/6/1
int *nTemp1;

int *nTemp2=new int[100];

我知道第二个语句要手动释放内存,第一个要释放吗?为什么?
---华软 网友回答---
1 不需要,因为他没指向什么。
2 进一步,指向的内存需要释放的时候才需要。
3 多个指针指向同一个内存,释放一次就够了。

---华软网友回复---
第一个没有分配空间,不用释放内存
最好使用完之后执行nTemp1 = NULL; (避免出现野指针)
第二句需要释放,因为分配了内存
delete[] nTemp2;
nTemp2= NULL;
---华软网友回复---
new出来的才要delete,和指针变量无关
---华软网友回复---
只有分配内存的才需要释放内存
---华软网友回复---
有new 才有delete
没new的 一概不用delete
---华软网友回复---
谢谢各位,刚才看了有关C++内存管理的文章,领悟了一些,分享一下。

踏入C++中的雷区——C++内存管理详解
http://tech.163.com/06/0425/10/2FI29E8M0009159Q.html
---华软网友回复---
nTemp1没有分配空间,不需要手动释放。只有在堆区开辟了空间的指针才可以被人为的释放掉,nTemp2是在堆区开辟,因此需要delete来释放它。
---华软网友回复---
引用楼主 zhxingway 的回复:
int *nTemp1;

int *nTemp2=new int[100];

我知道第二个语句要手动释放内存,第一个要释放吗?为什么?
第一个不需要释放,原因跟你定义了一个int i=0;一样,你不会去释放i,这里的nTemp1也只是一个变量,只不过类型为int*。
---华软网友回复---
引用 2 楼 mdesigner 的回复:
第一个没有分配空间,不用释放内存
最好使用完之后执行nTemp1 = NULL; (避免出现野指针)
第二句需要释放,因为分配了内存
delete[] nTemp2;
nTemp2= NULL;

正解
---华软网友回复---

楼主是这样的
在C++中,有三种内存管理方式:
1 自动存储
(在函数内部定义的常规变量使用自动存储空间(也就是自动变量),是个局部变量)
//退出函数自动释放

2 静态存储
(整个程序执行期间都存在,一般在函数外面定义 ,或者声明Static)
//整个程序运行期间都在,运运行结束自己释放

3 动态存储 (自由存储或者堆)
(new和delete提供了鉴于这两种之间的更为灵活的方法。这时的程序员对于内存有了更大的控制权)
//必须手动释放

希望有所帮助
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。