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

目次から探す

動的な配列の生成手順

動的な配列を生成するためには、C言語のmalloc関数を使用します。

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

このメモリを配列として使用することで、必要な要素数を動的に確保することができます。

以下に、動的な配列の生成手順を示します。

  1. 必要な要素数と要素のデータ型を決定する
  2. malloc関数を使用して、必要なメモリを確保する
  3. 確保したメモリを配列として使用する
  4. 配列に値を代入する
  5. 配列を使用した処理を行う
  6. 不要になったメモリを解放する

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


#include <stdio.h>
#include <stdlib.h>
int main() {
    int n; // 要素数
    int* array; // 配列のポインタ
    // 1. 必要な要素数を入力する
    printf("要素数を入力してください: ");
    scanf("%d", &n);
    // 2. メモリの確保
    array = (int*)malloc(n * sizeof(int));
    // 3. 配列として使用する
    if (array == NULL) {
        printf("メモリの確保に失敗しました\n");
        return 1;
    }
    // 4. 配列に値を代入する
    for (int i = 0; i < n; i++) {
        array[i] = i + 1;
    }
    // 5. 配列を使用した処理を行う
    printf("配列の要素: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");
    // 6. メモリの解放
    free(array);
    return 0;
}

上記のコードでは、ユーザーに要素数を入力させ、その要素数分のメモリをmalloc関数で確保しています。

確保したメモリを配列として使用し、値を代入しています。

最後に、メモリを解放しています。

このように、malloc関数を使用することで、動的な配列を生成することができます。

必要な要素数をユーザーに入力させることで、柔軟に配列のサイズを変更することができます。

また、メモリの解放も忘れずに行うようにしましょう。

動的な配列のサイズの変更方法

動的な配列を使用すると、実行時に配列のサイズを変更することができます。

これは、プログラムの実行中に必要なだけのメモリを確保するために便利です。

C言語では、realloc関数を使用して動的な配列のサイズを変更することができます。

realloc関数は、既存のメモリブロックのサイズを変更するために使用されます。

新しいサイズのメモリブロックを確保し、元のメモリブロックの内容を新しいメモリブロックにコピーします。

以下にrealloc関数の使用方法を示します。


#include <stdio.h>
#include <stdlib.h>
int main() {
    int* array = (int*)malloc(5 * sizeof(int)); // 初期の配列を確保
    // 配列の要素を表示
    printf("初期の配列: ");
    for (int i = 0; i < 5; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");
    // 配列のサイズを変更
    array = (int*)realloc(array, 10 * sizeof(int));
    // 新しい要素を追加
    for (int i = 5; i < 10; i++) {
        array[i] = i;
    }
    // 変更後の配列を表示
    printf("変更後の配列: ");
    for (int i = 0; i < 10; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");
    free(array); // メモリを解放
    return 0;
}

上記のコードでは、最初にmalloc関数を使用して5つの要素を持つ配列を確保しています。

その後、realloc関数を使用して配列のサイズを10に変更し、新しい要素を追加しています。

最後に、free関数を使用してメモリを解放しています。

実行結果は以下のようになります。

初期の配列: 0 0 0 0 0
変更後の配列: 0 0 0 0 0 5 6 7 8 9

このように、realloc関数を使用することで、動的な配列のサイズを変更することができます。

ただし、realloc関数は元のメモリブロックの内容を新しいメモリブロックにコピーするため、パフォーマンスの面で注意が必要です。

また、realloc関数は新しいメモリブロックの確保に失敗した場合にはNULLを返すため、エラーチェックも行う必要があります。

1 2

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