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

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

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

【问题讨论】:

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

标签: c pointers


【解决方案1】:

在下面的代码块中

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

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

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

     return &i;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2021-04-09
    • 2013-01-10
    • 2011-07-14
    相关资源
    最近更新 更多