这是一段简单的代码,我编写这些代码来检查返回局部变量的地址是否合法,并且我的假设被编译器证明是正确的,它给出了相同的警告:
warning: function returns address of local variable
Run Code Online (Sandbox Code Playgroud)
但是执行时会打印正确的地址......看起来很奇怪!
#include<stdio.h>
char * returnAddress();
main()
{
char *ptr;
ptr = returnAddress();
printf("%p\n",ptr);
}
char * returnAddress()
{
int x;
printf("%p\n",&x);
return &x;
}
Run Code Online (Sandbox Code Playgroud)
行为未定义.
当您调用未定义的行为时,允许发生任何事情 - 包括半理性行为.
返回局部变量的地址.它仍然是一个地址; 如果你幸运的话,它甚至可能是一个有效的地址.如果您访问它指向的数据,您得到的是任何人的猜测 - 尽管您最好不知道.如果调用另一个函数,则指向的空间可能会被新数据覆盖.
您应该收到有关int指针和char指针之间转换的警告- 以及有关返回局部变量地址的警告.