[解決済み] 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" に変化します。
関連
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
C++の配列コピー
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] Cコードの単体テスト【終了しました
-
[解決済み] mallocとcallocの違い?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] char s[]とchar *sの違いは何ですか?
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
警告:代入がキャストなしで整数からポインタを作成する場合の修正方法に関する警告
-
C 言語のポインタ配列のポインタ型、ポインタに値を割り当てるために配列名を使用、コンパイル時の警告:互換性のないポインタ型からの初期化
-
[解決済み] stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み] Windows用Cコンパイラ?[クローズド]
-
[解決済み] ⑭と⑯は何のためにあるのですか?
-
[解決済み] c または c++ 用のシンプルな 2 次元クロスプラットフォームグラフィックスライブラリ?[クローズド]
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] while ( !feof (file) ) 」は、なぜいつも間違っているのですか?
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
-
[解決済み] なぜalloca()の使用はグッドプラクティスとみなされないのでしょうか?