【C言語】配列の要素数を動的に変更できる(可変)ようにする方法

この記事では、C言語において配列の要素数を動的に変更する方法について解説します。

また、可変長配列の利点と注意点についても紹介します。

目次から探す

配列の要素数を動的に変更する方法

配列は、固定された要素数で宣言されるため、実行時に要素数を変更することはできません。

しかし、C言語では、動的メモリの割り当てを使用することで、配列の要素数を動的に変更することができます。

以下では、その方法について解説します。

動的メモリの割り当てには、«malloc関数»や«calloc関数»を使用します。

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

具体的な手順は以下の通りです。

  1. «malloc関数»や«calloc関数»を使用して、新しい要素数に対応するメモリ領域を確保します。
  2. 現在の配列の要素を新しいメモリ領域にコピーします。
  3. 古いメモリ領域を解放します。
  4. 新しいメモリ領域の先頭アドレスを配列のポインタに代入します。

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

#include <stdio.h>
#include <stdlib.h>
int main() {
    int* array = malloc(5 * sizeof(int)); // 初期の要素数5の配列を作成
    // 配列の要素に値を代入
    for (int i = 0; i < 5; i++) {
        array[i] = i + 1;
    }
    // 新しい要素数10の配列を作成
    int* newArray = malloc(10 * sizeof(int));
    // 古い配列の要素を新しい配列にコピー
    for (int i = 0; i < 5; i++) {
        newArray[i] = array[i];
    }
    // 古い配列のメモリを解放
    free(array);
    // 新しい配列の先頭アドレスを配列のポインタに代入
    array = newArray;
    // 新しい配列の要素に値を代入
    for (int i = 5; i < 10; i++) {
        array[i] = i + 1;
    }
    // 配列の要素を表示
    for (int i = 0; i < 10; i++) {
        printf("%d ", array[i]);
    }
    // 配列のメモリを解放
    free(array);
    return 0;
}

上記のコードでは、最初に要素数5の配列を作成し、その後要素数10の配列に変更しています。

新しい配列には、古い配列の要素がコピーされ、新しい要素には適当な値が代入されています。

最後に、配列の要素を表示し、メモリを解放しています。

可変長配列の利点と注意点

メモリの効率的な利用

可変長配列を使用することで、必要な要素数だけメモリを確保することができます。

これにより、メモリの効率的な利用が可能となります。

必要な要素数が少ない場合は、無駄なメモリの使用を避けることができます。

メモリリークのリスク

可変長配列を使用する際には、メモリリークに注意する必要があります。

要素数を変更するたびに、古いメモリ領域を解放する必要があります。

メモリを解放せずに新しいメモリ領域を確保すると、メモリリークが発生し、プログラムの実行中にメモリが不足する可能性があります。

プログラムの複雑性の増加

可変長配列を使用すると、プログラムの複雑性が増加する可能性があります。

要素数の変更やメモリの解放など、追加の処理が必要になるため、コードの保守性やデバッグの難易度が上がることがあります。

適切な管理と注意が必要です。

目次から探す