社区
新手乐园
帖子详情
new一块内存,为什么 两次delete它却没有内存错误?
xlbdan
2007-04-18 02:12:25
int main()
{
int* pp=new int;
delete pp;
delete pp;
getchar();
return 0;
}
怎么没有错?
什么情况才会出现删除同一块内存的内存错误?
...全文
862
25
打赏
收藏
new一块内存,为什么 两次delete它却没有内存错误?
int main() { int* pp=new int; delete pp; delete pp; getchar(); return 0; } 怎么没有错? 什么情况才会出现删除同一块内存的内存错误?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
C++第3课:C++
内存
泄露检测原理及案例实战
C++第3课:C++
内存
泄露检测原理及案例实战本课程侧重于C++的
内存
管理及泄露检测。我将带领大家学习OS的
内存
管理机制、C++的堆和栈、
内存
泄露及检测等。本课程具体的内容主要包括C++
内存
泄露案例、VS2015
内存
泄露检测、野指针、VirtualAlloc/HeapAlloc/malloc/
new
的区别、C++堆和栈的
内存
管理、栈简介、堆简介、堆与栈区别、栈的
内存
分配、Windows的虚拟
内存
技术、Windows的
内存
映射文件技术、Linux的虚拟
内存
技术、Linux的Valgrind
内存
泄露检测、Windows的VLD
内存
泄露检测、C++
内存
泄露检测方式之对象计数、C++
内存
泄露检测方式之重载
new
和
delete
、C++
内存
泄露检测方式之智能指针等。
c++动态
内存
管理
new
/
delete
前言 想必大家对c语言的动态
内存
分配并不陌生,忘了的小伙伴也...c语言的动态
内存
分配由于有些地方用起来麻烦,因此c++引入
new
/
delete
操作符进行
内存
管理,下面我们来深入探讨c++为什么要引入
new
/
delete
......
C++ malloc/free/
new
/
delete
详解(
内存
管理)
这里写目录标题malloc/free典型用法
内存
分配实现过程
new
/
delete
典型用法
内存
分配实现过程
new
/
delete
和malloc/free的区别 malloc/free 典型用法 malloc()负责动态配置
内存
,大小由size决定,返回值成功时为任意类型...
【C++】C/C++
内存
管理(
new
和
delete
详解)
C++
内存
管理:
new
和
delete
细节
c/c++一个指针
delete
两次
的后果
C++危险就在
内存
泄漏
内存
管理,但是也是迷人的地方。一般这些指针导致的
内存
问题都很难发现,除非编程经验非常丰富,下面说的就是一个例子。
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章