在昨天
#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()
{
static T t = { 1 }; /*此处应该加个static,之前函数内部定义的变量在函数结束时被释放掉,所以返回是找不到的。所以就会警告warning: address of local variable ‘ch’ returned [-Wreturn-local-addr]*/
return &t;
}
int main()
{
test();
printf("test");
return 0;
}
希望对题主有所帮助,望采纳!
#include <stdio.h>
//函数返回值赋值指针
struct T
{
int data;
};
T* test()
{
T* t = new T;
t->data = 1;
return t;
}
int main()
{
T* t = test();
printf("test");
return 0;
}