首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-07-16 
有个疑问,这个有问题么?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;



引用:


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;


热点排行