1. ホーム
  2. c

[解決済み] C言語でmallocを使うべきとき、使ってはいけないとき?

2023-02-04 23:04:37

質問

malloc()の動作は理解できました。質問ですが、このようなことがあります。

#define A_MEGABYTE (1024 * 1024)

char *some_memory;
size_t size_to_allocate = A_MEGABYTE;
some_memory = (char *)malloc(size_to_allocate);
sprintf(some_memory, "Hello World");
printf("%s\n", some_memory);
free(some_memory);

簡潔さのためにエラーチェックは省略しました。質問ですが、メモリ上の何らかの静的ストレージへのポインタを初期化することで、上記のようなことはできないのでしょうか? おそらく。

char *some_memory = "Hello World";

どの時点で、保持する必要のある値を宣言/初期化するのではなく、実際に自分でメモリを割り当てる必要があるのでしょうか?

どのように解決するのですか?

char *some_memory = "Hello World";

は文字列定数へのポインタを生成しています。つまり、文字列 "Hello World" はメモリの読み取り専用部分のどこかにあり、あなたはそれへのポインタを持つだけです。この文字列は読み取り専用として使用することができます。あなたは はできません。 は変更することができません。例

some_memory[0] = 'h';

トラブルを求めている。

一方

some_memory = (char *)malloc(size_to_allocate);

はchar配列(変数)を確保し、some_memoryはその確保されたメモリを指しています。これで、この配列は読み込みも書き込みもできるようになりました。できるようになりました。

some_memory[0] = 'h';

となり、配列の内容が "hello World" に変化します。