读书人

有个疑问这个有有关问题么

发布时间: 2013-07-16 22:38:05 作者: rapoo

有个疑问,这个有问题么?



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;



引用:


char * readUuid()
{

char uuid[MAX_PATH_MAC] = {0};

//给uuid写一些数据

return uuid;


[解决办法]
这样实现不了你想要的空间,函数调用结束就会自动释放栈上的空间。
[解决办法]


typedef struct tagUUID{char uuid[MAX_PATH_MAC];} UUID;
UUID readUuid()
{

UUID uuid = {{0}};

//给uuid写一些数据

return uuid;


读书人网 >C语言

热点推荐