中易网

C++delete问题

答案:2  悬赏:30  
解决时间 2021-05-13 01:51

#include<iostream>
using namespace std;
int main()
{
int n=5; 
int *p=new int;
p=&n;
cout<<"-------------------"<<endl;
cout<<p[0]<<endl;
free(p);
return 0;}

 

我不知道为什么VC能打出结果,但是会弹出窗口,提示Debug Assertion Error.,请问下是什么原因。

最佳答案
p = new int之后
p指向一块新分配出来的sizeof(int)个字节的内存地址
然后你p = &n后,p变更指向为局部变量n的地址
cout << p[0]输出p的指向也就是n的值

问题在于free(p); p这个时候指向的不是动态分配出来的内存,而是局部变量n的地址,free函数作用于非动态分配出来的内存地址行为是未定义的,所以出错了

另外加一句,new出来的内存就用delete删除了,new和delete,malloc和free不配对使用也会造成未定义错误行为的产生。
全部回答
你的指针是new出来的,不要用free()来释放。只能用delete!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
毕加索创作是什么
以前可以用自定义头像,为什么现在不可以用
女人的阴部为什么有时候会痒
Virtual PC安装winXP
qq帐号在那里
求有关思念家乡的诗词和歌曲~~~急!!!
武林90捏90羽现在100多级 要补齐属性要多少个
可是要怎样才能让我知道他是否爱我的呢
建设银行的“定期定额申购交易”是什么
美罗汇健康药房长治新市西街店这个地址在什么
衣服的搭配技巧
在线急等。java无间断滚动代码的问题。
曾美你到底还爱我吗?
对已经分手的男朋友放不下,而现在的男朋友对
贵阳5月10日至12日天气如何
推荐资讯
超级QQ最高黄金几
Q宠大乐斗比武大赛每天举办多少届?
在足球里右脚是打左前锋还是右前锋?
为什么手机空间我的抢车位没有一键停车?
爱情的路上为什么付出的真心越深就离伤心越近
魔兽技能问题
福建1区,和平捍卫者多少钱
魔兽快速升级
为什么把别人拉黑后TA们还可以看到我的动态?
星巴克咖啡张家港曼巴特广场店地址有知道的么
本人身高160厘米,体重42公斤,很想长到45公
从合肥到商丘.火车票多少钱?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?