#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;它写在哪里???
#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,则可以清除其无意义的地址值。