什么是野指针?如何避免?

3 分钟阅读 337 字 + 321 词
参考答案
  1. 什么是野指针
    野指针是指“ 指向已经被释放的或无效的内存地址的指针” 。在 C 和 C++ 这类允许直接操作内存地址的语言中,如果 指针没有被正确初始化,或者指针所指向的内存已经被释放 ,那么这个指针就成为了野指针。使用野指针可能会导致程序崩溃、数据损坏或者其他一些不可预测的行为。
  2. 在什么情况下会产生野指针?
    • 释放后没有置空指针 : 使用 delete free 释放了内存后,没有将指针设置为 nullptr ,指针仍然指向已释放的内存地址。
    • 回局部变量的指针 : 如果函数返回了指向其局部变量的指针,一旦函数返回,这些局部变量的生命周期结束,返回的指针成为野指针。
    • 越界访问:指针访问的内存超出了其合法的内存块边界。
    • 函数参数指针被释放。
  3. 如何避免野指针
    • 在释放内存后将指针置为 nullptr
    • 避免返回局部变量的指针。
    • 使用智能指针(如 std::unique_ptr std::shared_ptr )。
    • 注意函数参数的生命周期,避免在函数内释放调用方传递的指针,或者通过引用传递指针。