永发信息网

求解一个c++的问题

答案:2  悬赏:50  手机版
解决时间 2021-05-12 20:19

#include <iostream.h>
void main()
{
int *p,i;
p=new int [5];
for(i=0;i<5;i++)
p[i]=1;
delete []p;
for(i=0;i<5;i++)
{
p[i]=1;
cout<<p[i];
}
}

这个程序,我把申请的空间全部释放了,为什么还可以执行p[i]=1;它写在哪里???

最佳答案

delete运算法释放了指针变量所指的空间,并没有删除指针变量本身的存储单元和清除指针变量原来的值,以下为实验代码:


#include <iostream.h>
void main()
{
int *p,i;
p=new int [5];
for(i=0;i<5;i++)
{
p[i]=1;
cout<<&p[i]<<endl;
}
delete []p;
//p=NULL; //若添加了NULL之后,则不可以再对该地址赋值了!
for(i=0;i<5;i++)
{
p[i]=1;
cout<<p[i]<<endl;
cout<<&p[i]<<endl;
}
}


程序的输出结果如下:


0x00381100
0x00381104
0x00381108
0x0038110C
0x00381110
1
0x00381100
1
0x00381104
1
0x00381108
1
0x0038110C
1
0x00381110


观察输出结果容易发现,指针的地址值没有变化,假如你对该指针变量赋值,虽然可以输出,但是指针所指对象已经没有值的意义了!假如你delete操作之后,对指针变量赋NULL,则可以清除其无意义的地址值。


全部回答
还是写在刚刚被分配又释放掉的内存里 只不过这个时候的这块内存不是合法的可用内存 所以你给它写入一个值准确地说应该是未定义行为 这和你定义一个野指针 int* p; 然后*p = 3;差不多
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
吃美满玫素消炎药会推迟月经期吗
生旦净末丑指的是什么,一个女生给我发 旦净生
关于抬头看天空的句子,抬头看看天空,天空飘来
魔法师怎么才能升级快?
马苏演过哪些电视剧,好看的玛丽苏大陆电视剧
一些可爱的动物名字
办张工商借记卡多少钱
山寨飞利浦X688手机QQ下载
早餐吃炒粉油腻的东西会长肥吗
公司成立周年主题口号,公司出游横幅标语?
附近那有饰品和小礼品的批发市场?谢谢…
问个美国恐怖电影的名字,情节大约是一个很恶
光波,无线电波,微波,超声波,紫外线,红外
宋词按字数分为,字数最少的宋词
电脑主机的电源一般都为多大的功率?如果不同
推荐资讯
为什么手机不能开通QQ炫舞紫钻?
连谓句和兼语句的区别,连谓句,兼语句,双宾语
指甲上有白点是缺锌。缺锌应该吃什么
如果一男孩ai上了那个女孩·。女孩说不可能L
诺基亚6120C和5320XM哪个好
天冷了怎搞?
驾照理论考不起怎么办?
生意不好的语句,朋友生意不好给他点鼓励的句
是做收银好还是做接待好?
dnf44级yuansu去哪升级最快
视频聊天好吗?
飞轮海有几个Q?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?