2

次のようなことをする場合:

char array[2][5] = {"cars", "tags"}
char array2[] = "computer";

(最初の行に対して) に等しいメモリが暗黙的に割り当てられています。

sizeof(array); OR
sizeof(char*10); 

または、どのようにやりたいか。

または、次のようにすることもできます。

char *ptr = "cars";
char *ptr2 = malloc(sizeof(*ptr2)*5);
*ptr2 = "cars";

malloc を使用して明示的にメモリを割り当てるためにポインターを使用している場合は、free(ptr); を使用してそのポインターを解放することをお勧めします。

しかし、上記のように定義した場合、メモリの明示的な割り当てと同じ理由で、次の呼び出しが必要ですか?

free(ptr);
free(ptr2);
free(array);
free(array2);

-- 余談ですが、上記の宣言/初期化はすべて暗黙的に NULL で終わる文字列ですよね?

4

5 に答える 5

1

しかし、上記のように定義した場合、メモリの明示的な割り当てと同じ理由で、次の呼び出しが必要ですか?

mallocいいえ、またはcallocまたはによって返されないメモリを解放することは違法reallocです。

上記の宣言/初期化はすべて、暗黙的に NULL で終了する文字列ですよね?

はい、これらの文字列は文字列リテラルと呼ばれ、終端がNULLになります。

于 2013-07-26T13:48:54.303 に答える
1

静的配列メモリがコード ブロックの最後で自動的に解放されると宣言する場合、malloc を使用して割り当てたメモリを解放するだけで済みます。

于 2013-07-26T13:52:44.193 に答える