比方说,我有两个类似的函数-
char* f2(void){
char* str = malloc(100);
strcpy(str, "string1");
return str;
}
char* f1(void){
char* reply = malloc(150);
strcpy(reply, "string = ");
strcat(reply, f2());
return reply;
}
我从主像这样打电话给
printf("reply = %s", f1());
我的问题:我单独释放(回复)就足够了吗?还是必须在f1()中显式释放(str)?
您也必须释放f1()
的返回值。更改
strcat(reply, f2());
至:
char *str = f2();
strcat(reply, str);
free(str);
无论您手动分配什么(例如:malloc、calloc等),都必须手动释放。。
在函数f1
中,必须释放函数f2
的返回指针,否则将出现内存泄漏
char* f1(void){
char* reply = malloc(150);
char *str = f2();
strcpy(reply, "string = ");
strcat(reply, str);
free( str );
return reply;
}
此外,您还必须释放函数f1
返回的指针
char *reply = f1();
printf("reply = %s", reply );
free( reply );