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));
}
メモリの解放
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を使ってメモリを動的確保する方法の解説です。
動的確保を行うことで、必要なメモリを柔軟に確保できるため、プログラムの効率性や柔軟性を向上させることができます。
是非、実際に試してみてください。