C:从另一个函数释放指针

时间:2014-09-29 12:26:16

标签: c pointers malloc free

说,我有两个像这样的函数 -

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)?

3 个答案:

答案 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 );