说,我有两个像这样的函数 -
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;
}
我从main那里打电话 -
printf("reply = %s", f1());
我的问题: 我可以单独释放(回复),还是必须在f1()中明确释放(str)?
答案 0 :(得分:5)
您必须将f1()
的返回值释放到。变化
strcat(reply, f2());
为:
char *str = f2();
strcat(reply, str);
free(str);
答案 1 :(得分:2)
无论你手动分配什么(例如:malloc,calloc等),你都必须手动免费..
答案 2 :(得分:2)
在函数f1
中,您必须释放函数f2
的返回指针,否则会出现内存泄漏
char* f1(void){
char* reply = malloc(150);
char *str = f2();
strcpy(reply, "string = ");
strcat(reply, str);
free( str );
return reply;
}
同样在main中你必须释放函数f1
char *reply = f1();
printf("reply = %s", reply );
free( reply );