“野指针”是指向“垃圾”内存的指针,而不是NULL指针。我们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。

“野指针”的成因有三种:

(1),指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的默认值是随机的,也就是说它会指向内存中的一个随机的位置。所以,指针变量在创建的同时应当被初始化,要么将指针设为NULL,要么给它分配内存,使其指向合法的内存。例如:

char *p = NULL;

char *p = new char[100];

(2),使用free 和 delete释放掉为指针分配的内存之后,没有将指针设置为NULL,从而使该指针成为指向“垃圾”内存的“野指针”。所以释放内存之后必须将指针设置为NULL ,如下所示:

delete p;

p = NULL;

(3)指针操作超越了变量的作用范围。