【C言語】malloc関数を使って動的に配列を生成する方法を解説

目次から探す

動的な配列の解放方法

動的な配列を使用する場合、メモリの解放は非常に重要です。

メモリを解放しないと、プログラムがメモリを無駄に消費し続け、最終的にはメモリリークが発生します。

メモリリークはプログラムのパフォーマンスを低下させるだけでなく、予期しないエラーやクラッシュの原因となる可能性もあります。

C言語では、動的に割り当てられたメモリを解放するために、 free() 関数を使用します。

free() 関数は、 malloc()calloc() などで割り当てられたメモリを解放するために使用されます。

以下に、動的な配列を解放するための基本的な手順を示します。

  1. 動的な配列を使用するコードの最後に、 free() 関数を使用してメモリを解放する処理を追加します。

free(配列名);
  1. free() 関数を呼び出す前に、配列がNULLでないことを確認します。

NULLでない場合にのみ、メモリを解放します。


if (配列名 != NULL) {
    free(配列名);
}
  1. free() 関数を呼び出した後は、解放したメモリを使用しないように注意してください。

解放したメモリを使用すると、未定義の動作が発生する可能性があります。

以下に、具体的な例を示します。


#include <stdio.h>
#include <stdlib.h>
int main() {
    int* numbers = malloc(5 * sizeof(int)); // int型の要素を5つ持つ動的な配列を生成
    if (numbers != NULL) {
        // 配列に値を代入
        numbers[0] = 1;
        numbers[1] = 2;
        numbers[2] = 3;
        numbers[3] = 4;
        numbers[4] = 5;
        // 配列の要素を表示
        for (int i = 0; i < 5; i++) {
            printf("%d ", numbers[i]);
        }
        printf("\n");
        free(numbers); // メモリを解放
        numbers = NULL; // ポインタをNULLに設定
    }
    return 0;
}

上記の例では、 malloc() 関数を使用して5つの要素を持つ動的な配列を生成し、値を代入しています。

その後、 free() 関数を使用してメモリを解放し、ポインタをNULLに設定しています。

メモリを解放する際には、必ず対応する malloc()calloc() の呼び出しと対応させるようにしてください。

また、同じメモリを複数回解放することは避けてください。

1 2

この記事のページ一覧
  1. 現在のページ
目次から探す