返回指针后如何释放内存

时间:2021-07-27 09:13:50

标签: c pointers free

char* stringFunction(char *astrics){

    char *string;

    string = (char*)malloc(MAX);
    string[0] = 0;
    strcat(string,"Hello ");
    strcat(string,astrics);
    strcat(string,"\n");
    return string;
    //free(string);
    
}

int main(int argc, char* argv){

    printf(stringFunction("Robert"));

    printf(stringFunction("Robert Greene"));

    return 0;
}

如果在 return 语句之后没有读取代码,那么我应该如何释放为指针分配的内存 - 字符串

2 个答案:

答案 0 :(得分:2)

当您返回分配的内存块时,您将所有权转移给调用者。这意味着调用者有责任在完成使用后释放内存块。或者,它可以反过来将所有权转移给它自己的调用者(等等......)

答案 1 :(得分:1)

您的程序在使用完内存之前不应释放内存。在 return 语句中,您的程序还没有完成使用该内存,因为 main 函数仍然想要打印它!如果您释放 stringFunction 内的内存,则 main 将打印释放的内存。

不要犯认为必须释放指针的常见错误。您不必释放指针。你只需要释放内存。

在这种情况下,main 必须在完成使用后释放内存并且不再需要它。这意味着我们不能只写 printf(stringFunction(,因为我们需要将指针放在变量中。

int main(int argc, char* argv){

    char *mystring = stringFunction("Robert");
    printf(mystring);
    free(mystring);

    mystring = stringFunction("Robert Greene");
    printf(mystring);
    free(mystring);

    return 0;
}

额外注意:你应该养成写 printf(mystring); 的习惯,而不是 printf("%s", mystring);。否则,如果您将“Robert Greene”更改为“Robert %s”,您的程序可能会崩溃。但是如果你使用 printf("%s", mystring); 它只会打印“Hello Robert %s”