我遇到了这个页面,该页面说明了创建悬挂点的常用方法。
下面的代码用于通过返回局部变量的地址来说明悬空指针:
// The pointer pointing to local variable becomes
// dangling when local variable is static.
#include<stdio.h>
int *fun()
{
// x is local variable and goes out of scope
// after an execution of fun() is over.
int x = 5;
return &x;
}
// Driver Code
int main()
{
int *p = fun();
fflush(stdout);
// p points to something which is not valid anymore
printf("%d", *p);
return 0;
}
在运行它时,这是我得到的编译器警告(如预期的那样):
In function 'fun':
12:2: warning: function returns address of local variable [-Wreturn-local-addr]
return &x;
^
这是我得到的输出(到目前为止很好):
32743
但是,当我注释掉 fflush(stdout) 行时,这是我得到的输出(带有相同的编译器警告):
5
这种行为的原因是什么?fflush 命令的存在/不存在究竟是如何导致这种行为变化的?