一、定义
野指针指向一个已删除的对象或未申请访问受限内存区域的指针。
与空指针不同,野指针无法通过简单的if判断是否为 NULL避免,而只能通过养成良好的编程习惯来尽力减少。
危害:野指针可能会造成内存泄露的危害。(注意:野指针不会一定造成内存泄露,如果该野指针指向的内存刚好是某个变量的地址,那么野指针也能使用这块内存)
二、产生原因
(1)指针变量未初始化
任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。
(2)指针释放后之后未置空
有时指针在free或delete后未赋值 NULL,便会使人以为是合法的。别看free和delete的名字(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。此时指针指向的就是“垃圾”内存。
(3)指针操作超越变量作用域
三、如何避免
(1)初始化时置 NULL
释放后的指针应立即将指针置为NULL,防止产生“野指针”。
(2)释放时置 NULL
当指针p指向的内存空间释放时,没有设置指针p的值为NULL。delete和free只是把内存空间释放了,但是并没有将指针p的值赋为NULL。