这是一个悬垂的指针怎么样?

时间:2015-04-01 22:38:02

标签: c dangling-pointer

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

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;
}

这是一个悬空指针,哪个指针悬空?代码看起来对我有用。它应该打印&#34; i = 21&#34;并返回。我没有看到任何悬垂的指针。

1 个答案:

答案 0 :(得分:4)

该程序中没有悬空指针。

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

int*,函数f中的i参数指向p(它已初始化为参数i的值,指向j)。 f的生命周期仅限于函数i中块的执行; i生命在i的生命周期开始和结束后i = 21的生命周期结束后开始{/ 1}}。

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