📜  悬空指针 - C++ (1)

📅  最后修改于: 2023-12-03 15:25:41.515000             🧑  作者: Mango

悬空指针 - C++

悬空指针是指指向已经释放(或者不可用)内存的指针。这种指针也被称为“野指针”。

悬空指针的危害

悬空指针可能会引起程序的崩溃或者产生不可预期的行为。因为悬空指针指向的内存可能已经被重新分配给其他变量,导致悬空指针操作这些变量的值,从而导致未定义行为甚至是程序崩溃。

下面是一个简单的例子:

int* p = new int;
delete p;
*p = 0; // 这里就是悬空指针

在这个例子中,指针 p 指向分配的整数内存。然后,使用 delete 将这个内存释放掉。最后,使用悬空指针 p 尝试修改这个内存,会导致未定义行为。

避免悬空指针

为了避免悬空指针,我们应该遵循以下原则:

  • 在动态分配内存之前,先检查指针是否为 nullptr
  • 在释放内存之后,将指针设置为 nullptr
  • 不要使用已经释放的内存。

下面是一个示例:

int* p = new int;
if (p != nullptr)
{
    // 操作 p
}

delete p;
p = nullptr;

在这个示例中,我们首先检查指针 p 是否为 nullptr。如果是,则不执行任何操作。然后,我们释放内存,并将指针设置为 nullptr。这样,即使我们后面尝试使用悬空指针,程序也会崩溃,方便我们调试。