new一块内存,为什么 两次delete它却没有内存错误?

xlbdan 2007-04-18 02:12:25
int main()
{
int* pp=new int;
delete pp;
delete pp;

getchar();
return 0;

}

怎么没有错?
什么情况才会出现删除同一块内存的内存错误?
...全文
862 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
支持英文数字 2012-04-25
  • 打赏
  • 举报
回复
首先delete是一个运算符。
delete object;在编译时会变成
if (object != 0){
ClassC :: ~ClassC(object);
_delte(object);
}
所以会使用多次delete时,都不会产生错误,因为编译器加上了一个判断语句。
xlbdan 2007-04-19
  • 打赏
  • 举报
回复
呵呵,太有意思了,
我用自己的机器上VC6不出错
用同学的机器上VC6就出错.
holmesyj 2007-04-19
  • 打赏
  • 举报
回复
我这里是报错的,我用的是VC6.0
CrissChan 2007-04-19
  • 打赏
  • 举报
回复
int main()
{
int* pp=new int;//仅仅是声名了 并没有初始化
delete pp;
delete pp;

getchar();
return 0;

}
sunshine09010208 2007-04-19
  • 打赏
  • 举报
回复
这个是delete函数的本身的问题
为了把函数写的健壮一些
在函数内部回收内存的时候会判断指针是否为空
如果为空就不会回收内存
做鸡真好吃 2007-04-19
  • 打赏
  • 举报
回复
mark~
fiveyes 2007-04-19
  • 打赏
  • 举报
回复
就是这种错误才令人头痛,程序员最喜欢的就是编译错误,如果所有的错误都是编译错误该多好啊!
蒋晟 2007-04-19
  • 打赏
  • 举报
回复
delete之后这块内存就不属于你了,说不定什么时候就被重新分配出去,你再在这块内存上执行一次析构函数就把不属于你的数据破坏了
ooolxf 2007-04-18
  • 打赏
  • 举报
回复
我这都有报错啊~~
xlbdan 2007-04-18
  • 打赏
  • 举报
回复
VC6和DEVCPP上都没问题,你是哪个编译器?
mLee79 2007-04-18
  • 打赏
  • 举报
回复
你在多少个平台上测过没有问题, 我这好几个地方出问题 ...

顶 ..
todototry(来csdn,学会扯淡了...) ( ) 信誉:100 Blog 加为好友 2007-04-18 15:57:21 得分: 0


depend on rp



xlbdan 2007-04-18
  • 打赏
  • 举报
回复
好像不是楼上说的这样吧,
在指向NULL的时候delete没有问题这我知道,
可是对同一块内存进行多次的释放肯定是一个错误,
但我的程序却又不报错,
所以很迷惑。
什么时候才会报错呢?
guanwl 2007-04-18
  • 打赏
  • 举报
回复
delete 和 free 不一样.
delete更智能一些. 不会对一个delete过的指针再次进行delete操作.
thinkinnight 2007-04-18
  • 打赏
  • 举报
回复
不断的new和delete
xlbdan 2007-04-18
  • 打赏
  • 举报
回复
int *p=new int;
int *q=p;
delete p;
delete q;

连这样也不报错了,我原来记得是报错的。不知道怎么搞的。
如果是潜在错误的话,这样做都不被触发,那还要怎么做它才肯发作啊?
thinkinnight 2007-04-18
  • 打赏
  • 举报
回复
不出现错误不代表没有错误。

可以试着构造这样一种情况:
new一块内存char *a1 = new char[1024];
然后a2也指向这块内存。
delete a1;
然后新new一个对象,此时新new的这个对象就有可能使用的是刚刚释放的空间。
。。。对新new的对象进行操作
delete a2;
....对新new的对象进行操作(此时,可能有灾难性行为出现)
angus1982wang 2007-04-18
  • 打赏
  • 举报
回复
指针未被初始化,delete操作无用
todototry 2007-04-18
  • 打赏
  • 举报
回复
depend on rp
tryc 2007-04-18
  • 打赏
  • 举报
回复
怎么没有错?

多次删除不会出错


什么情况才会出现删除同一块内存的内存错误?

两个指针指向同一个对象,
lidongri 2007-04-18
  • 打赏
  • 举报
回复
int main()
{
int* pp=new int;
delete pp;
delete pp;
getchar();
return 0;
}
怎么没有错?
什么情况才会出现删除同一块内存的内存错误?
---

不要被暂时的假象迷惑,如果在大的项目中有类似的代码,问题可就大了
可能出现逻辑正确,但结果错误的情况
加载更多回复(5)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧