c++ - 什么是悬空指针?

标签 c++ pointers dangling-pointer

我知道这是一个很常见的问题,但对我来说还是个新问题!

我不明白悬空指针的概念,正在谷歌搜索,并编写测试方法以找到一个。

我只是想知道这是一个悬空指针吗?由于我发现的任何示例都返回了一些东西,所以我正在尝试类似的东西!

谢谢!

void foo(const std::string name)
{
    // will it be Dangling pointer?!, with comments/Answer
    // it could be if in new_foo, I store name into Global.
    // Why?! And what is safe then?
    new_foo(name.c_str());
}

void new_foo(const char* name)
{
    // print name or do something with name...   
}

最佳答案

悬空指针是指向无效数据或不再有效数据的指针,例如:

Class *object = new Class();
Class *object2 = object;

delete object;
object = nullptr;
// now object2 points to something which is not valid anymore

即使在堆栈分配的对象中也会发生这种情况:

Object *method() {
  Object object;
  return &object;
}

Object *object2 = method();
// object2 points to an object which has been removed from stack after exiting the function

c_str 返回的指针可能会在字符串被修改或销毁后失效。在您的示例中,您似乎没有对其进行修改,但由于不清楚您将如何处理 const char *name ,因此不可能知道您的代码本质上是否安全。

例如,如果您将指针存储在某处,然后相应的字符串被销毁,则指针将变为无效。如果您仅在 new_foo 范围内使用 const char *name(例如,出于打印目的),则指针将保持有效。

关于c++ - 什么是悬空指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17997228/

相关文章:

c++ - 初始化二维数组中特定行和列的问题

c++ - 生成 m 和 n 之间的素数

c++ - 检查字符串是否包含其他字符串元素

c++ - 为什么 std::string_view 在三元表达式中创建悬空 View ?

c++ - 是否可以在其范围之外访问局部变量的内存?

c++ - 如何将 openCV 视频流式传输到 HTML 网页?

c - 取消引用寄存器 gdb

c - C 中的嵌套结构和取消引用指针

c - 指针未给出预期结果

c++ - 是否可以在其范围之外访问局部变量的内存?