malloc()について
ひょんなことからC言語の案件を来週からやることになり、現在スタンバイ期間中。
C言語の基礎を学習していますが、初学者の私はmallocについて一瞬足を立ち止める。
わい)「malloc」はメモリを確保するっていうのはわかったが、どのタイミングで使っていくものなのかよくわからないんだよな・・・・」
・・・というわけでAIに聞いてみた。
malloc() は 実行時に必要なメモリを動的に確保するときに使います。
C言語の配列は通常 コンパイル時にサイズが決まるため、サイズが変動するデータを扱う場合に malloc() が便利です。
malloc() を使うケースのイメージ
1.ユーザー入力のサイズが可変
例えば、char input[100] のように固定サイズで配列を確保すると、100文字より短い場合はメモリが無駄になりますし、100文字を超えるとバッファオーバーフローのリスクがあります。
→ malloc() を使えば 必要なサイズだけメモリを確保 できる。
-
配列サイズが決まらない場合(例: ファイルの読み込み)
ファイルの内容を全部読み込むとき、サイズがわからない場合があります。
この場合、malloc() を使えば ファイルのサイズに応じたメモリを動的に確保 できます。 -
構造体やリストを動的に管理
malloc() は 配列だけでなく構造体やリストの動的な確保 にも使えます。
例えば、リンクリストを作るときに、リストのノード(データ)を malloc() で確保します。
malloc() を使うタイミングまとめ
・配列サイズが実行時に決まる場合(ユーザー入力、ファイル読み込み)
・可変長のデータを扱う場合(文字列操作、大きな配列)
・構造体やリンクリストを動的に作る場合(データ構造の動的管理)
逆に malloc() を使わなくていい場合
・固定サイズのデータ(例: char str[100];)
・スタックで管理できるデータ(ローカル変数として扱えるもの)
※例えば、固定サイズで十分なら、普通の配列でいい。
→ ヒープ領域を使う malloc() は「可変長データ」を扱うときに便利
・・・・なるほど。全部はよくわかってないけどサイズ・メモリの大きさが動的でどの大きさか大まかにしか予測つかないときとかにmallocは使ったりするのか。
逆にどのようなデータのサイズを入れるか明確である場合は通常の宣言でよいのね。
※char buffer[100]; // 100バイト確保(スタック)
了解。。引き続き勉強進めていきます・・・・
Discussion