悬挂指针(dangling pointer)和野指针(wild pointer)是两种常见的指针错误,虽然它们都可能导致未定义行为,但它们产生的原因和表现有所不同。
1.悬挂指针(Dangling Pointer)
悬挂指针是指向已经被释放或无效内存区域的指针。当一个指针所指向的内存已经被释放,但指针本身还在继续使用,就会出现悬挂指针。这种情况通常发生在对象被删除后,指针没有被重新初始化或者置为nullptr
。
例子:
#include <iostream>void danglingPointerExample() {int* p = new int(5); // 动态分配内存delete p; // 释放内存// p现在是悬挂指针,如果继续使用会导致未定义行为std::cout << *p << std::endl; // 使用悬挂指针
}int main() {danglingPointerExample();return 0;
}
2.野指针(Wild Pointer)
野指针是指向未分配或未初始化内存区域的指针。野指针指向的内存地址是不确定的,可能是任何地址,这种指针没有明确初始化为有效地址。
例子:
#include <iostream>void wildPointerExample() {int* p; // p是一个未初始化的指针,指向一个随机地址// p是一个野指针,如果继续使用会导致未定义行为std::cout << *p << std::endl; // 使用野指针
}int main() {wildPointerExample();return 0;
}