必要な分だけメモリを使う「動的メモリ確保(malloc / free)」とは?C言語の基本をやさしく解説!
C言語では、通常の配列のようにあらかじめサイズを決めてメモリを使うだけでなく、
実行中に必要なメモリを「動的に」確保することもできます。
そのとき使うのが malloc
と free
です。
動的メモリ確保とは?
動的メモリ確保とは、プログラムの実行中にメモリを確保・解放する仕組みです。
メモリ確保には malloc
、解放には free
を使います。
malloc(メモリ確保)
#include <stdlib.h>
int *p = (int *)malloc(sizeof(int) * 5); // int型5個分のメモリ確保
sizeof(int)
:int型1つのバイト数
malloc
は確保したメモリの先頭アドレスを返す
- 戻り値は
void *
なので、型に応じてキャストが必要
- メモリ確保に失敗した場合は
NULL
が返る
free(メモリ解放)
free(p); // mallocで確保したメモリを解放
malloc
したら、必ず最後に free
で解放!
- 同じポインタを2回
free
すると未定義動作になる
mallocと配列の違い
項目 |
静的配列 |
動的メモリ(malloc) |
サイズ |
固定(変更不可) |
実行時に決定できる |
メモリ解放 |
自動 |
自分で free する必要あり |
宣言方法 |
int arr[5]; |
int *arr = malloc(...); |
使用例:任意のサイズの配列を作る
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n;
printf("要素数を入力してください:");
scanf("%d", &n);
int *arr = (int *)malloc(sizeof(int) * n);
if (arr == NULL) {
printf("メモリ確保失敗\n");
return 1;
}
for (int i = 0; i < n; i++) {
arr[i] = i * 10;
}
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
free(arr); // 必ず解放!
return 0;
}
まとめ
mallocは「必要な分のメモリを確保する関数」、freeは「確保したメモリを解放する関数」です。
実行時にサイズが決まる処理や、配列を柔軟に扱いたいときに非常に便利です。
初心者の方は、「malloc → 使用 → free
」の流れを意識して練習してみましょう!