【C言語】2次元配列をmallocを使ってメモリを動的確保する方法

2次元配列のメモリを動的確保することで、実行時に必要なメモリを柔軟に確保することができます。

この記事では、C言語において2次元配列を動的に確保する方法を解説します。

目次から探す

2次元配列の動的確保の手順

プログラミングにおいて、2次元配列を動的に確保する方法を学びましょう。

2次元配列は、行と列の2次元のデータ構造であり、多くの場面で使用されます。

動的確保を行うことで、実行時に必要なメモリを動的に確保することができます。

2次元配列の要素数の入力

まず、2次元配列の要素数を入力する必要があります。

行数と列数をユーザーから受け取る方法はいくつかありますが、ここでは簡単な方法として、プログラム内で直接指定する方法を紹介します。

int rows = 3; // 行数を3とする
int cols = 4; // 列数を4とする

行数と列数は、プログラムの要件に応じて適切な値を設定してください。

malloc関数を使ったメモリの動的確保

次に、malloc関数を使用して、2次元配列のためのメモリを動的に確保します。

malloc関数は、指定したバイト数のメモリを確保し、その先頭アドレスを返します。

int** array; // 2次元配列のポインタを宣言
// 行数分のメモリを確保
array = (int**)malloc(rows * sizeof(int*));
// 各行ごとに列数分のメモリを確保
for (int i = 0; i < rows; i++) {
    array[i] = (int*)malloc(cols * sizeof(int));
}

malloc関数を使用する際には、確保するメモリのサイズを適切に計算してください。

メモリの解放

2次元配列を使用した後は、確保したメモリを解放する必要があります。

解放しないと、メモリリークが発生し、プログラムのパフォーマンスに悪影響を及ぼす可能性があります。

// 各行ごとに確保したメモリを解放
for (int i = 0; i < rows; i++) {
    free(array[i]);
}
// 行数分のメモリを解放
free(array);

完成したコード

以下に、2次元配列を動的に確保するための完全なコードを示します。

#include <stdio.h>
#include <stdlib.h>
int main() {
    int rows = 3; // 行数を3とする
    int cols = 4; // 列数を4とする
    int** array; // 2次元配列のポインタを宣言
    // 行数分のメモリを確保
    array = (int**)malloc(rows * sizeof(int*));
    // 各行ごとに列数分のメモリを確保
    for (int i = 0; i < rows; i++) {
        array[i] = (int*)malloc(cols * sizeof(int));
    }
    // 2次元配列に値を代入
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            array[i][j] = i + j;
        }
    }
    // 2次元配列の値を表示
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", array[i][j]);
        }
        printf("\n");
    }
    // 各行ごとに確保したメモリを解放
    for (int i = 0; i < rows; i++) {
        free(array[i]);
    }
    // 行数分のメモリを解放
    free(array);
    return 0;
}

以上が、2次元配列をmallocを使ってメモリを動的確保する方法の解説です。

動的確保を行うことで、必要なメモリを柔軟に確保できるため、プログラムの効率性や柔軟性を向上させることができます。

是非、実際に試してみてください。

目次から探す