#include<iostream>
using namespace std;
int main()
{
char *p;
delete p;
cout<<"delete成功"<<endl;
return 0;
}
1.此时的指针并没有指向有效的地址,此时p为野指针。当delete成功用于p时则会输出delete成功。下图为运行结果:
显然并没有打印delete成功。说明delete不能用于野指针
#include<iostream>
using namespace std;
int main()
{
cout<<"*****"<<endl;
char name[10]="guzi";
char *p=name;
cout<<"*****"<<endl;
delete p;
cout<<"*****"<<endl;
delete p;
cout<<"delete成功"<<endl;
return 0;
}
2.此时让p指向一个有效地址name再次delete 看运行结果如下
显然只打印了两行*****,按道理应该打印三行但由于第一次delete让p变成了野指针,再次进行delete 会使程序发生不可想象的错误
#include<iostream>
using namespace std;
int main()
{
cout<<"*****"<<endl;
char *p=NULL;
delete p;
delete p;
cout<<"*****"<<endl;
}
3.此时让p指向空运行如下
显然程序正常运行,即说明delete可以连续操作指向NULL的指针
总结:delete不可用于野指针,对于不是也指针的指针使用delete后会是指针变成野指针。可以使指向NULL的指针连续进行delete