3

次のコードを想像してください。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXSTRSIZE 2048    

int main()
{
    char *str;

    str = get_string();

    return 0;
}

char * get_string()
{
    char temp[MAXSTRSIZE], *str;

    fgets(temp,MAXSTRSIZE,stdin);
    str = malloc( sizeof(char) * (strlen(temp) + 1) );
    strcpy(str, temp);

    return str;
}

temp関数内の変数を free() する必要がありますget_stringか? 内のget_stringコードがmain()?

4

4 に答える 4

3

いつfree()でもどこでもかまいmalloc()ませんが、メモリ リークを防ぐためには必ず実行する必要があります。が呼び出されたときfree()に、ポインターを再び逆参照してはなりません。

get_string()の前に を宣言または定義する必要があることに注意してくださいmain()

于 2013-05-12T10:55:52.140 に答える
3

str呼び出し元は、解放されていることを確認する必要があります。tempは動的に割り当てられていないため、解放できません。

于 2013-05-12T10:55:18.223 に答える
2

変数を解放する必要はありません (MUST NOT)が、( get_string で ed であるため)temp変数を解放する必要があります。strmainmalloc

于 2013-05-12T10:55:48.853 に答える