很微小的问题

vnking 2010-07-15 04:38:51


char *p=new char[80];

delete p;

delete []p;



请问用delete p;正确还是用delete []p;正确?为什么?
...全文
130 点赞 收藏 27
写回复
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
zuiyuezhou888 2010-07-22
[Quote=引用 26 楼 f10icq 的回复:]
貌似楼上没有人说得清楚delete []p和delete p的差别。
[/Quote]

晕 已经很清楚啦
回复
f10icq 2010-07-21
貌似楼上没有人说得清楚delete []p和delete p的差别。
回复
xingpacer 2010-07-20
顶一个~
回复
glory_manred 2010-07-20
delete p 清除首变量
回复
windows_star 2010-07-20
分配的数组 应该用delete []p;
如果分配单个变量 就应该用delete p;

最后置NULL,防止野指针。
回复
飞檐走壁 2010-07-20
分配的数组 应该用delete []p;
如果分配单个变量 就应该用delete p;
回复
飞檐走壁 2010-07-20
分配的数组 应该用delete []p;
如果分配单个变量 就应该用delete p;
回复
yunxiang_myx 2010-07-20
[Quote=引用 5 楼 zuiyuezhou888 的回复:]

分配的数组 应该用delete []p;
如果分配单个变量 就应该用delete p;
一个好的习惯 delete之后 把p=null;防止野指针的出现
[/Quote]

顶,一定要记的置空。很容易忘记的一个地方!
回复
BlueMap 2010-07-19
[Quote=引用 4 楼 visualeleven 的回复:]

对于简单基础类型delete和delete[]效果是一样,对于自定义类,就不一样了
[/Quote]
正解。所谓简单类型是char int long等基础类型。。。
回复
vnking 2010-07-19
就是想弄清楚 delete []p 和 delete p 的差别到底在那里,否则基于习惯和简便,多数会使用 delete p;如果碰到必须使用 delete []p 的场合,可能发生难以调试的错误。
回复
churenxh 2010-07-19
delete []p;
p = NULL;
支持!@
回复
xiaoyilong19 2010-07-19
你要是不怕麻烦,可以调试跟踪一下new 和delete的源代码,看看内存是如何分配的,new delete 都涉及到析构函数的调用,不是简单的分配内存空间,也就是上面几位说的简单数据类型没事,类对象就可能有问题,
回复
lazy_2010 2010-07-18
#4 说的是对的,但是要多复杂才必须使用 delete[] 的确是一个不太容易清楚的地方;

比如:设计一个数据结构,包含多个 int 的数据结构,也可以直接使用 delete 。
回复
lingdu787 2010-07-18
楼主想知道啊?
回复
tangbohu222 2010-07-17
我顶 我顶 我顶 我顶 我顶
回复
一名程序员 2010-07-17
[Quote=引用 1 楼 cpp_yangzuoshi 的回复:]
delete []p;
p = NULL;
[/Quote]正解!
回复
tanguixing 2010-07-17
想要的目的是什么呢/?
回复
逗比汪星人 2010-07-17
不需要汇编解释吧?

一个是数组首地址、一个是指针,应该就明白了嘛?
回复
vnking 2010-07-17
从汇编代码的角度看,两者的差别在哪里?
回复
tubo_true 2010-07-16
[Quote=引用 5 楼 zuiyuezhou888 的回复:]

分配的数组 应该用delete []p;
如果分配单个变量 就应该用delete p;
一个好的习惯 delete之后 把p=null;防止野指针的出现
[/Quote]
up
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告