野指针与悬空指针

野指针:
就是没有被初始化过的指针或者指向受限访问的指针(不给用户访问)
如何防止野指针:
初始化指针nullptr
悬空指针:
指针最初指向的内存已经被释放了的指针,虽然指针指向的对象已经释放,但是指针本身还是没有释放。
下述例子中,p2就是一个悬空指针

#include 
int main(int argc, char *argv[])
{
        int *p1 = (int *)malloc(sizeof (int));
        int *p2 = p1;        /* p2 and p1 are pointing to the same memory */
        free(p1);            /* p1 is       a dangling pointer, so is p2  */
        p1 = NULL;           /* p1 is not   a dangling pointer any more   */
        return (*p2 & 0x7f); /* p2 is still a dangling pointer            */
}

如何防止悬空指针:
智能指针或者在释放指针前判断指针是否为空,不为空再释放。```
总结:
无论是野指针还是悬空指针,都是指向无效内存区域(这里的无效指的是"不安全不可控")的指针。 访问"不安全可控"(invalid)的内存区域将导致"Undefined Behavior"。也就是说:任何可能都会发生。要么编译失败,要么执行得不正确(崩溃(e.g. segmentation fault)或者悄无声息地产生不正确的执行结果),或者偶尔会正确地产生程序员希望运行的结果。

参考文章:
https://www.cnblogs.com/idorax/p/6475941.html

你可能感兴趣的:(C++学习,c++,数据结构,开发语言)