C++ 面试题 目录

C++ 中什么是野指针 (dangling pointer)?

推荐答案

野指针(dangling pointer)是指指向已经释放或无效内存的指针。这种指针通常是由于对象被销毁或内存被释放后,指针仍然保留着原来的地址,导致访问该指针时可能会引发未定义行为或程序崩溃。

本题详细解读

什么是野指针?

野指针是指指向已经释放或无效内存的指针。当指针指向的内存被释放或对象被销毁后,指针仍然保留着原来的地址,此时该指针就成为了野指针。访问野指针可能会导致程序崩溃、数据损坏或其他未定义行为。

野指针的常见场景

  1. 对象销毁后继续使用指针

  2. 函数返回局部变量的地址

  3. 指针超出作用域

如何避免野指针?

  1. 及时置空指针: 在释放内存后,将指针置为 nullptr,以避免误用。

  2. 使用智能指针: C++11 引入了智能指针(如 std::unique_ptrstd::shared_ptr),它们可以自动管理内存,避免野指针问题。

  3. 避免返回局部变量的地址: 确保函数返回的指针指向的内存是有效的,避免返回局部变量的地址。

野指针的危害

  • 未定义行为:访问野指针可能导致程序崩溃、数据损坏或其他不可预测的行为。
  • 难以调试:野指针问题通常难以发现和调试,因为它们可能在程序运行一段时间后才表现出来。

总结

野指针是 C++ 中常见的内存管理问题,通常是由于指针指向的内存被释放或对象被销毁后,指针仍然保留着原来的地址。为了避免野指针,建议及时置空指针、使用智能指针,并避免返回局部变量的地址。

纠错
反馈