gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:29:05 26 4
gpt4 key购买 nike

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

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

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

谢谢!

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com