【问题标题】:How is this a dangling pointer?这怎么是一个悬空指针?
【发布时间】:2015-04-01 22:38:02
【问题描述】:

当我在此链接上找到代码时,我正在网上阅读有关悬空指针的信息:

http://www.billioncodes.com/c/ques-and-ans/747-what-is-dangling-pointer-give-an-example-on-pointers-to-pointer-and-passing-by-address

我把它贴在这里:

#include <stdio.h>
void f(int *j)
{
    (*j)++;
}
int main()
{
    int i = 20;
    int *p = &i;
    f(p);
    printf("i = %d\n", i);
    return 0;
}

这是一个悬空指针,哪个指针悬空?该代码对我来说似乎有效。它应该打印“i = 21”并返回。我没有看到任何悬空指针。

【问题讨论】:

  • 嗯...您是否执行了代码以查看它是否确实如此?
  • 这段代码中没有悬空指针。
  • 我建议你不要再在billioncodes.com网站上阅读任何内容,那里似乎没有任何有意义的内容。
  • 你可能不应该相信那些试图让in成为语言中关键字的代码。可能会发生,但又过了 30 年。
  • 呃,我刚刚看了那个网站。这完全是废话,用胡言乱语写成,暗示了不良做法和滥用术语。

标签: c dangling-pointer


【解决方案1】:

该程序中没有悬空指针。

p 被初始化为指向i。 p 和 i 的生命周期完全相同; p 与 i 同时不复存在(离开最近的封闭块时)。

j,函数f中的int*参数指向i(它被初始化为参数p的值,指向i)。 j 的生命周期仅限于函数f 中块的执行; i 的生命周期在 i 的生命周期开始之后开始,并在 i 的生命周期结束之前结束。

程序应该打印i = 21。没有悬空指针,没有未定义的行为。 (int main() 应该是 int main(void),但这是一个小问题。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多