📅  最后修改于: 2023-12-03 15:27:12.469000             🧑  作者: Mango
悬空指针是指指针变量所保存的内存地址已经不存在了,可能是指向的堆内存已经被释放,或者是指向的栈内存已经被销毁。因为指针变量依然存在,所以在程序中仍然可以使用这个指针变量,但是使用这个指针变量所指向的内存地址已经不确定了,所以称之为悬空指针。
空指针则是指针变量没有指向任何内存地址。空指针在程序中通常用来表示某个对象不存在的情况,比如函数返回值为NULL表示函数没有找到指定的对象。
悬空指针通常出现在动态内存分配的场景中。比如以下代码片段:
int* ptr = new int(10);
delete ptr;
在上面的代码中,我们通过new操作符在堆内存中分配了一个整型变量的内存空间,并将这个内存空间的地址保存在指针变量ptr里。然后我们调用delete操作符释放这个内存空间,此时ptr指向的内存地址已经被释放掉了,此时如果再通过ptr去访问这个内存空间就会导致程序崩溃。
另一种产生悬空指针的场景是指针变量在定义的时候没有初始化。比如以下代码片段:
int* ptr;
在这个代码中,我们定义了一个整型指针变量ptr,但是没有对其进行初始化,此时ptr的值是不确定的,如果不小心使用了这个指针变量,就会导致程序崩溃。
为了避免悬空指针的出现,我们需要在动态内存分配操作后及时释放内存空间,并且在定义指针变量时及时初始化。同时,可以将指针变量的值设为NULL或nullptr表示这个指针变量没有指向任何内存地址,也就是空指针。这样可以有效地避免程序因为悬空指针而崩溃的问题。