悬空指针的含义[重复]

Posted

技术标签:

【中文标题】悬空指针的含义[重复]【英文标题】:Meaning of dangling pointers [duplicate] 【发布时间】:2018-10-27 11:19:21 【问题描述】:

如何确定 C 中的悬空指针?这是一个例子。

int *fun(void) 
    int i = 2;
    return &i;

【问题讨论】:

你是什么意思确定?确定fun 的返回值是否是悬空指针?或者传递/返回i 变量的值(或地址)? i 是一个局部变量。 fun 返回后它不存在,但您正在返回指向它的指针。如果您返回一个指向分配内存的指针但在返回它之前释放了指针,则相同。这样的指针悬空。这不是火箭科学。 我的意思是函数的返回值是不是悬空指针? 我明白了。谢谢 【参考方案1】:

在下面的代码块中

int *fun(void) 
    int i = 2;
    return &i;

你正在返回一个局部变量的地址,这意味着你正在返回一个悬空指针并且它会导致未定义的行为,你的编译器可以已经警告过你喜欢

错误:函数返回局部变量的地址 [-Werror=return-local-addr]

     return &i;

如果您可以使用gcc -Wall -Wstrict-prototypes -Werror test.c 之类的标志进行编译,则在上面

【讨论】:

以上是关于悬空指针的含义[重复]的主要内容,如果未能解决你的问题,请参考以下文章

野指针 悬空指针和悬空引用

在整数指针与字符指针的情况下悬空指针

C语言中的“悬空指针”和“野指针”是什么意思?

通过从本地 C 样式数组返回指针来获取悬空指针

这怎么是一个悬空指针?

Swift 结构警告“'UnsafeMutableRawPointer' 的初始化导致指针悬空”