野指针,也就是指向不可用内存区域的指针。通常对这种指针进行操作的话,将会使程序发生不可预知的错误。
野指针与空指针(NULL)不同,空指针在C语言中定义为
define NULL ((void *)0)
可见空指针指向0地址,而野指针指向不确定的地方。野指针产生主要有两个原因:
1.指针变量未初始化:任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。
2.指针释放之后未置空:有时指针在free或delete后未赋值 NULL,便会使人以为是合法的。别看free和delete的名字(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针删除。
为什么野指针会产生错误呢?
现在有指针int* a和一个变量int b;如果a没有赋值的话,他可能指向任意地方,假设它指向了b的地址,现在又使用了a的指向,如*a=c,那么就在无意间把b的值给改变了。
产生野指针以上面第一个原因居多,可以按照以下方法避免: