我就郁闷了

cryingzgz 2008-05-06 12:57:54
就这一小段代码
它怎么就会出问题呢???

#include <iostream>
using namespace std;

int main()
{
int *p = new int;
int a = 4;
p = &a;

delete p;

return 0;
}


这个导致程序崩溃,问题出在delete p;这句
我想破了脑袋也没想明白到底是怎么一回事
晕了~先睡个午觉再回来看看
...全文
155 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
baihacker 2008-05-06
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int main()
{
int *p = new int;
int a = 4;
delete p;
p = &a;



return 0;
}
cryingzgz 2008-05-06
  • 打赏
  • 举报
回复
睡醒了~
这么热闹

道理已经很明白了
结贴去了
fuqd273 2008-05-06
  • 打赏
  • 举报
回复
开贴不结贴……
wei1019 2008-05-06
  • 打赏
  • 举报
回复
9楼说的太形象了,哈哈...

一定要在 p = &a; 之前delete p,

因为a 地址在栈区,不在堆区,只有在堆区的才可以有程序员自己管理(申请或释放)
qmm161 2008-05-06
  • 打赏
  • 举报
回复
你找系统借了个金元宝,却还了个土疙瘩,你说他干吗?
zsxcn 2008-05-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 baihacker 的回复:]
C/C++ code#include<iostream>usingnamespacestd;intmain()
{int*p=newint;inta=4;
delete p;
p=&a;
return0;
}
[/Quote]

glchen57 2008-05-06
  • 打赏
  • 举报
回复
Task有个heap,有个stack,开始p指向heap空间某个地址,后来被改成指向stack里面a的地址,delete不能操作stack地址空间,故崩溃。我想是这样。。。
hblinlin 2008-05-06
  • 打赏
  • 举报
回复
int *p = new int; //分配空间 并复制默认值(根据编译器不同而变化),此时p有地址的
int a = 4;
p = &a;
delete p;   //删除p地址的所指的内容,即删除 a = 4, 故出错。


这样解释可以吗??
薛定谔之死猫 2008-05-06
  • 打赏
  • 举报
回复
试图delete栈上的内存空间,这样是不行的,new和delete操作应用程序的堆内存空间,解决办法如一楼
clhposs 2008-05-06
  • 打赏
  • 举报
回复
p地址已经改变 不是你申请空间的地址了
Jncryang 2008-05-06
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

int main()
{
int *p = new int(3);
int a = 4;
delete p;
p = &a;



return 0;
}

babyvox1999 2008-05-06
  • 打赏
  • 举报
回复
a不是new的你干吗要delete - -!

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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