c - 这怎么是悬空指针?

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

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

最佳答案

该程序中没有悬挂指针。

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

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

程序应该打印i = 21。没有悬挂指针,没有未定义的行为。 (int main() 应该是 int main(void),但这是次要的一点。)

关于c - 这怎么是悬空指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29402070/

相关文章:

c - 如何在 Windows 上浏览 ~1GB 的巨大代码库

c - C 中的悬空指针

c++ - std::unique_ptr 超出范围后对象仍然可访问。不同的运行时行为

c++ - 是否可以在其范围之外访问局部变量的内存?

c - 为什么下面两个代码提供不同的结果?

c - 为什么 Valgrind 会提示这段代码?

C - 移动数组

c - 在函数调用中,为什么逗号不是序列点?

c++ - 尝试在 NetBeans 6.9.1 中包含 .h 库

c++ - 我不明白为什么我有一个悬空指针