C语言-函数调用的copy与free

第一段代码:

char *func(void)
{
    char *str = (char *)malloc(sizeof(char)*5);
    return str;
}
int main()
{
    char *p =func();
    return 0;
}

第二段代码:

char **func(void)
{
    char *str = (char *)malloc(sizeof(char)*5);
    return &str;
}
int main()
{
    char **p =func();
    return 0;
}

答:  第一段代码中,func函数分配了内存,返回字符串指针时,首先是copy返回出去,其次是回收了*str这个标签,共享给了p 在进行回收。
(*str回收了,但是*p没有)
 
第二段代码,
首先返回的是*str的地址, 它会是copy,返回的是一个局部变量str的地址,退出func函数时,str会被回收,所以p指向了一个不存在的的指针地址
它返回的*str的地址是  (指向的地址free了,所以未定义)
未定义行为

(它指向的是局部的指针地址所以被回收了,这两段代码意义不一样)

 

posted @ 2024-01-17 16:58  尘余  阅读(29)  评论(0)    收藏  举报