6

文字列を割り当ててそのポインタを返す関数があります。他の関数の呼び出しで直接使用する場合、メモリを解放する必要がありますか?

例えば:

char *getRow(){
     char *someString = (char*) malloc(sizeof(char) * 10);
     strcpy(someString , "asdqwezxc");
     return someString;
}

int main(){
     printf("%s", getRow());
}

その関数に割り当てられたメモリはどうなりますか?それを解放する方法はありますか、それとも使用する前に変数に保存する必要がありますか?

4

3 に答える 3

7

関数から戻った場合でも、明示的に指定しない限り、メモリの割り当ては解除されません。したがって、戻り値を格納してを呼び出す必要がありますfree

int main(){
    char* str = getRow();
    printf("%s", str);
    free(str);
}
于 2012-11-18T04:06:02.143 に答える
1

あなたはそれを変数に保存し、それを使用し、そしてそれを解放する必要があります。解放しないと、メモリリークが発生します。

于 2012-11-18T04:08:54.213 に答える
0

はい、必要です。mallocは、明示的に解放する必要があるヒープからメモリを割り当てます。char * someStringなどの変数はスタックから割り当てられ、関数が戻るときに解放されます。スタックとヒープを誤解していると思います。

このスタックとヒープはどこにあるのかを見てください

于 2012-11-18T04:21:24.117 に答える