注册 登录
编程论坛 C++教室

delete运算符的问题?

明天不一样 发布于 2007-01-27 21:30, 766 次点击

用new运算符创建数组:new *p=int[10];
然后用delete删除数组:delete [ ] p;
问题是:用delete删除数组后:数组占用的内存被释放,可是指针变量p所占用的内存是否被释放?

7 回复
#2
蓝鹰2007-01-27 21:56
delete [ ] p是释放p所指向的内存空间,不释放p所用的内存。试想以下,如果p所用的内存被释放了,那指针p也就不存在了。
#3
maxlea2007-01-27 22:17
delete 释放的内存必须是 new 创建的,然而p是指向新创建的内存的一个指针变量,这个指针变量拥有自己的内存,不会被 delete 释放
#4
dragonfly2007-01-29 12:23
p占用的内存会在P的作用域消失时由系统释放
就像int ,double等变量一样
我想是这样的
#5
pinglideyu2007-01-30 16:48
顶2.3楼的。
嘿嘿~~~~~~~~~~~·
#6
gao_gao862007-03-03 17:00
回复:(pinglideyu)顶2.3楼的。嘿嘿~~~~~~~~~~~·
p所指向的内存空间被释放了,但p占的内存是不释放的,p还是指向那片内存区域.应该是这样的.
#7
wfpb2007-03-03 18:17
int *p=new int[10];
p在声明时被定义赋值,既new函数返回的一个地址(这个地址是计算机随机分配的用户指定大小的一块内存地址的最低位).
计算机前1024K以外的内存就是我们的程序使用的内存,其实只是分为2种:使用中内存和空闲内存.
计算机对使用中内存不能再进行分配操作,只能在空闲内存中选择.
new分配内存,就是告诉计算机这块内存现在属于被使用状态,以后的内存分配不能在用这块内存.
而delete则是告诉计算机这块内存为空闲内存,以后的内存分配可以使用这部分内存地址.

内部存储和外部存储我想在这方面也是相似的吧?

比如清空回收站就是一个例子:

很多时候即使你清空回收站,一些高手还是可以把很多数据恢复.

我认为:
原因也就是回收站被清空只是告诉计算机这部分外部存储单元已经为闲置部分,可以对这部分存储单元进行写操作。未闲置部分不允许写操作,被计算机保护.

所以只要回收站被清空后,位进行任何数据写操作的话,也是可以把删除的数据还原的,具体操作不会.
#8
wfpb2007-03-03 18:18
至于delete是标记int[10]这块内存现在为未使用状态,所以与p无关。
1