有个疑问,这个有有关问题么
有个疑问,这个有问题么?char * readUuid(){char uuid[MAX_PATH_MAC] {0}//给uuid写一些数据return uuid
有个疑问,这个有问题么?
char * readUuid()
{
char uuid[MAX_PATH_MAC] = {0};
//给uuid写一些数据
return uuid;
}
[解决办法]有,uuid是临时的
[解决办法]一定会出现警告,但是可能程序还可以照常运行。但这确实有问题,楼上是对的。
[解决办法]返回临时变量的地址,是未定义行为,什么情况都有可能出现
uuid参数所占的内存区域也许还没有被覆盖,也许会被覆盖
[解决办法]不要反悔局部变量的地址,因为局部变量在函数结束后其空间就“释放”了,这里的释放意思是这个空间不再属于这个变量了,可以被移作他用,如果你访问时还没有被改写,那结果可能是对的,如果被改写了,结果就是错的。
[解决办法]函数内部局部指针在结束后将指向非法地址,调试看看
[解决办法]
char* readUuid(void)
{
char* uuid = (char*)malloc(MAX_PATH_MAC + 1);
memset(uuid, 0, MAX_PATH_MAC + 1);
//给uuid写一些数据
return uuid;
}
[解决办法]这样实现不了你想要的空间,函数调用结束就会自动释放栈上的空间。
[解决办法]
typedef struct tagUUID{char uuid[MAX_PATH_MAC];} UUID;
UUID readUuid()
{
UUID uuid = {{0}};
//给uuid写一些数据
return uuid;
}