悬空指针的含义[重复]
Posted
技术标签:
【中文标题】悬空指针的含义[重复]【英文标题】:Meaning of dangling pointers [duplicate] 【发布时间】:2018-10-27 11:19:21 【问题描述】:如何确定 C 中的悬空指针?这是一个例子。
int *fun(void)
int i = 2;
return &i;
【问题讨论】:
你是什么意思确定?确定fun
的返回值是否是悬空指针?或者传递/返回i
变量的值(或地址)?
i
是一个局部变量。 fun
返回后它不存在,但您正在返回指向它的指针。如果您返回一个指向分配内存的指针但在返回它之前释放了指针,则相同。这样的指针悬空。这不是火箭科学。
我的意思是函数的返回值是不是悬空指针?
我明白了。谢谢
【参考方案1】:
在下面的代码块中
int *fun(void)
int i = 2;
return &i;
你正在返回一个局部变量的地址,这意味着你正在返回一个悬空指针并且它会导致未定义的行为,你的编译器可以已经警告过你喜欢
错误:函数返回局部变量的地址 [-Werror=return-local-addr]
return &i;
如果您可以使用gcc -Wall -Wstrict-prototypes -Werror test.c
之类的标志进行编译,则在上面
【讨论】:
以上是关于悬空指针的含义[重复]的主要内容,如果未能解决你的问题,请参考以下文章