読者です 読者をやめる 読者になる 読者になる

malloc

mallocは、指定されたサイズのメモリを動的に割り当てるC標準ライブラリ関数・・・。

Man page of MALLOC

引数には、割り当てるメモリのサイズを指定する・・・。
戻り値には、割り当てたメモリ領域の先頭アドレスが返ってくる・・・。

これを使って、int型の動的配列を作ろう・・・。

mallocなどのユーティリティ関数を使うには、stdlib.hをインクルードする・・・。

変数と配列(正確には割り当てられた動的配列を指すポインタ)の宣言・・・。

まず、countに動的配列の要素数を入力してもらう・・・。

mallocで、要素数がcountのint型動的配列分のメモリを確保してもらう・・・。

1要素につき、sizeof(int)のサイズが必要なので、

malloc(sizeof(int) * count);

と指定する・・・。
mallocの戻り値はvoid *型で返ってくるが、int型配列として扱いたいのでint *型にキャスト(型変換)する・・・。

int_array = (int *)malloc(sizeof(int) * count);

キャストについては後日・・・。

とにかく、このint_arrayというポインタは、生成された動的配列を指している・・・。
動的配列にscanfで値を入れていく・・・。

int_arrayはポインタなので、ポインタ演算特性をいかして、

int_array + i

これはint_arrayのi番目の要素のアドレスを指す・・・。
scanfはこのアドレスの指す領域に入力された値を格納する・・・。

入力が終わったら、

各要素を今度は出力する・・・。
printfでは値を出力するので、

*(int_array + i)

としてint_arrayのi番目の要素の値をprintfに指定している・・・。

最後に、mallocで確保したメモリは、freeで必ず解放しなければならないので、

としてメモリを解放する・・・。

実行すると、

$ ./malloc
count: 5
int_array[0]: 4
int_array[1]: 3
int_array[2]: 2
int_array[3]: 5
int_array[4]: 1

int_array[0] = 4
int_array[1] = 3
int_array[2] = 2
int_array[3] = 5
int_array[4] = 1

こんな感じ・・・。
この配列は動的に確保されて、そして解放されたものである・・・。

Sample/malloc.c at master · bg1bgst333/Sample · GitHub