64,642
社区成员
发帖
与我相关
我的任务
分享
class obj
{
private:
int a;
public:
obj()
{
a=10;
}
obj(int x):a(x)
{}
};
void temp()
{
obj* p1=new obj();
obj* p2=new obj(1);
obj* p3=new obj[100];
delete p1;
delete p2;
delete []p3;
}
p1=NULL;
p2=NUll;
p3=NULL;
#include<iostream>
using namespace std;
class obj
{
private:
int a;
public:
obj(){a=10;};
obj(int x):a(x)
{};
//由于 a是私有的,所以定义show,和 seta访问a,
void show()const {cout<<x<<endl;};
void seta(int x){a=x;};
};
void temp()
{
obj* p1=new obj();
obj* p2=new obj(1);
obj* p3=new obj[100];
delete p1;
//p1->show();//这里p1就是野指针了,不过基本没有问题,
//因为没有重新分配内存,而且只是读操作
p1->seta(200); //p1就是野指针,这种写操作问题比较大。
delete p2;
delete []p3;
obj* a=new (300);
// p1->seta(200);
//这种地方,野指针问题就比较严重了,因为不知道,
// 是否p1已经分配给a了,或者如果用于管理内存,
//那就会造成,内存分配机制出错,错误更严重。
delete a;
}
不过,没初始化的指针,已经释放的指针,置为NULL,确实是个好主意,好习惯!
p1=NULL;
p2=NUll;
p3=NULL;
delete 之后最好也加上这些吧!,不然是成为野指针的!它还是可以用的!
只是地址不明确而已!无法操控的!