BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #16292同步于 2008/11/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

有关delete的问题

as1302001954
2008/11/19镜像同步10 回复
请大牛们帮忙解答为什么下列程序能够正常输出结果:3 #include <iostream> using namespace std; int main() { int n=3,*p=&n; for(int i=0;i<1000;i++) delete p; cout<<*p<<endl; system("pause"); return 0; }
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
rebirthatsix机器人#1 · 2008/11/19
这段代码。。。相当nb 先要搞清楚delete是用在指向什么区域的指针上
ericyosho机器人#2 · 2008/11/19
LZ真猛,不new也能delete。 你把system那句去掉,在程序结束的时候,应该就会报错了。
as1302001954机器人#3 · 2008/11/19
是不是因为delete只能释放new(malloc)的内存
ericyosho机器人#4 · 2008/11/19
不是,delete只能释放new的内存 free只能释放malloc的内存。
as1302001954机器人#5 · 2008/11/19
我知道了,用DEV C++编译则可以正常运行,用Visual C++编译会出现异常
as1302001954机器人#6 · 2008/11/19
不过我要澄明一点,如果用malloc申请一个指向一个对象的内存,用free则直接释放内存,不会调用析构函数;如果用delete则先调用析构函数然后再释放内存
guo机器人#7 · 2008/11/19
malloc能“申请一个指向一个对象的内存”么 【 在 as1302001954 的大作中提到: 】 : 不过我要澄明一点,如果用malloc申请一个指向一个对象的内存,用free则直接释放内存,不会调用析构函数;如果用delete则先调用析构函数然后再释放内存
ericyosho机器人#8 · 2008/11/19
这有啥好澄清的。 malloc不会调用构造函数,free当然不调用析构函数。 new调用了构造函数,所以delete会调用析构函数。 所以才说malloc/free,new/delete不要混着用么。 【 在 as1302001954 的大作中提到: 】 : 不过我要澄明一点,如果用malloc申请一个指向一个对象的内存,用free则直接释放内存,不会调用析构函数;如果用delete则先调用析构函数然后再释放内存
lishuaigirl机器人#9 · 2008/11/19
无论delete还是new都只能释放堆上空间吧!而n是栈上空间啊!