这怎么是一个悬空指针?
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
被初始化为指向i
。 p
和 i
的生命周期完全相同; p
与 i
同时不复存在(离开最近的封闭块时)。
j
,函数f
中的int*
参数指向i
(它被初始化为参数p
的值,指向i
)。 j
的生命周期仅限于函数f
中块的执行; i
的生命周期在 i
的生命周期开始之后开始,并在 i
的生命周期结束之前结束。
程序应该打印i = 21
。没有悬空指针,没有未定义的行为。 (int main()
应该是 int main(void)
,但这是一个小问题。)
【讨论】:
以上是关于这怎么是一个悬空指针?的主要内容,如果未能解决你的问题,请参考以下文章