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了,所以未定义)
未定义行为
(它指向的是局部的指针地址所以被回收了,这两段代码意义不一样)

浙公网安备 33010602011771号