概念:指向了一块随机内存空间,不受程序控制。如指针指向已经被删除的对象或者指向一块没有访问权限的内存空间,之后如果对其再解引用的话,就会出现问题。
“野指针”产生的原因:
- 指针定义时未被初始化:指针在被定义的时候,如果程序不对其进行初始化的话,它会指向随机区域,因为任何指针变量(除了static修饰的指针变量)在被定义的时候是不会被置空的,它的默认值是随机的。
- 指针被释放时没有被置空:我们在用malloc开辟内存空间时,要检查返回值是否为空,如果为空,则开辟失败;如果不为空,则指针指向的是开辟的内存空间的首地址。指针指向的内存空间在用free()或者delete(注意delete只是一个操作符,而free()是一个函数)释放后,如果程序员没有对其置空或者其他的赋值操作,就会使其成为一个野指针。
- 指针操作超越变量作用域:不要返回指向栈内存的指针或引用,因为栈内存在函数结束的时候会被释放,示例(转自高质量C++):
1 class A {
2 public:
3

野指针是指未初始化或已被释放但未置空的指针,可能导致不可预知的错误。其成因包括指针定义时未初始化、释放内存后未置空以及超越变量作用域。野指针的危害在于解引用时产生未定义行为,增加调试难度。避免野指针的方法包括初始化指针为NULL、释放后立即置空,并培养良好编程习惯。
最低0.47元/天 解锁文章
1404

被折叠的 条评论
为什么被折叠?



