这怎么是一个悬空指针?

Posted

技术标签:

【中文标题】这怎么是一个悬空指针?【英文标题】: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 年。 呃,我刚刚看了那个网站。这完全是废话,用胡言乱语写成,暗示了不良做法和滥用术语。 【参考方案1】:

该程序中没有悬空指针。

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

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

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

【讨论】:

以上是关于这怎么是一个悬空指针?的主要内容,如果未能解决你的问题,请参考以下文章

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

悬空指针的含义[重复]

这是C ++中的未定义行为从悬空指针调用函数

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

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

线索二叉树