在昨天
#include <stdio.h>
//函数返回值赋值指针
struct T
{
int data;
};
T* test()
{
T t = { 1 };
return &t;
}
int main()
{
T* t = test();
printf("test");
return 0;
}
在printf打印前,调试发现p所指正常,如图:

printf打印后,发现,如图

出现错误,p乱指
在昨天
#include <stdio.h>
//函数返回值赋值指针
struct T
{
int data;
};
T* test()
{
T t = { 1 };
return &t;
}
int main()
{
T* t = test();
printf("test");
return 0;
}
在printf打印前,调试发现p所指正常,如图:

printf打印后,发现,如图

出现错误,p乱指
不要返回局部变量的地址,因为局部变量是在栈上分配的,函数返回时,局部变量所占的内存被释放,所以其地址也就无效了
如果你要从一个函数返回地址的话,你可以动态分配内存返回其在堆上的地址(要记得自己释放内存),全局变量或静态变量的地址