0

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

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”并返回。我没有看到任何悬空指针。

4

1 回答 1

4

该程序中没有悬空指针。

p被初始化为指向i。两者都p具有i完全相同的寿命;p不再存在的同时i(离开最近的封闭块)。

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

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

于 2015-04-01T22:51:17.123 回答