●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

必要な分だけメモリを使う「動的メモリ確保(malloc / free)」とは?C言語の基本をやさしく解説!

C言語では、通常の配列のようにあらかじめサイズを決めてメモリを使うだけでなく、
実行中に必要なメモリを「動的に」確保することもできます。
そのとき使うのが mallocfree です。

動的メモリ確保とは?

動的メモリ確保とは、プログラムの実行中にメモリを確保・解放する仕組みです。
メモリ確保には 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」の流れを意識して練習してみましょう!