Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のrealloc()関数の使い方:メモリブロックのサイズ変更を解説

C言語の realloc() 関数は、malloc()calloc() で事前に確保したメモリブロックのサイズを変更(再割り当て)するために使用される関数です。プログラムの実行中に必要なメモリ量が変わる場合でも、新しい領域をゼロから確保し直すことなく柔軟に対応できるため、動的メモリ管理において非常に重要な役割を果たします。

realloc() の構文

void *realloc(void *pointer, size_t size)

パラメータ

  • pointer − malloc() または calloc() で以前に確保されたメモリブロックを指すポインタ。
  • size − メモリブロックの新しいサイズ(バイト単位)。

戻り値

サイズ変更が成功した場合は、再割り当てされたメモリブロックへのポインタを返します。失敗した場合は NULL を返しますが、その場合でも元のメモリブロックは解放されず有効なまま残ります。

realloc() の使用例

次のサンプルコードでは、calloc() で確保した配列用のメモリを realloc() で拡張しています。

#include <stdio.h>
#include <stdlib.h>
int main() {
    int n = 4, i, *p, s = 0;
    p = (int*) calloc(n, sizeof(int));
    if(p == NULL) {
        printf("\nエラー!メモリを確保できませんでした。");
        exit(0);
    }
    printf("\n配列の要素を入力してください:");
    for(i = 0; i < n; ++i) {
        scanf("%d", p + i);
        s += *(p + i);
    }
    printf("\n合計:%d", s);
    p = (int*) realloc(p, 6);
    printf("\n配列の要素を入力してください:");
    for(i = 0; i < n; ++i) {
        scanf("%d", p + i);
        s += *(p + i);
    }
    printf("\n合計:%d", s);
    return 0;
}

実行結果

配列の要素を入力してください:3 34 28 8
合計:73
配列の要素を入力してください:3 28 33 8 10 15
合計:145

プログラムの解説

このプログラムでは、まず calloc() によって int 型4個分のメモリブロックを確保し、ユーザーから要素を入力して合計値を計算・表示しています。その後、realloc() を呼び出してメモリブロックのサイズを4から6へ拡張し、改めて要素を入力して合計を計算し直しています。

p = (int*) realloc(p, 6);
printf("\n配列の要素を入力してください:");
for(i = 0; i < n; ++i) {
    scanf("%d", p + i);
    s += *(p + i);
}

realloc() を安全に使うためのポイント

  • 一時ポインタを使う: realloc() の戻り値を直接元のポインタへ代入すると、サイズ変更に失敗したときに元のメモリブロックへの参照を失い、メモリリークにつながる可能性があります。一度別のポインタで受け取り、NULL でないことを確認してから代入しましょう。
  • サイズはバイト単位で指定: 第2引数の size はバイト数です。複数の要素を扱う場合は「要素数 × sizeof(int)」のように指定するのが一般的です。
  • NULL チェックを忘れない: メモリ確保に失敗した場合のエラー処理を必ず組み込みましょう。

安全な書き方の例は以下の通りです。

int *tmp = (int*) realloc(p, 6 * sizeof(int));
if(tmp != NULL) {
    p = tmp;  /* 成功時のみポインタを更新 */
} else {
    /* エラー処理:元の p は引き続き有効 */
}

  1. ChromebookでSkypeを使う方法|インストールから便利な活用テクまで徹底解説

    Skypeは、インスタントメッセージのやり取りや音声通話、ビデオ会議に対応した定番のコミュニケーションプラットフォームです。スマートフォンやタブレット、ノートPC、スマートスピーカー、ゲーム機など幅広いデバイスで利用でき、Chromebookでも快適に動作します。 新しいChromebookを購入した方、古いノートパソコンをChromebook化した方、これからChrome OSに慣れていきたい方に向けて、この記事ではChromebookへのSkypeのインストール方法と基本的な使い方をわかりやすく解説します。 ChromebookにSkypeをダウンロード・インストールする Chr

  2. WindowsでPythonを使う方法|インストールから実行・モジュール導入まで完全解説

    初心者にも学びやすいプログラミング言語の代表格として、Pythonは世界中の何百万人ものコーダーに選ばれています。学習のハードルが低く、Windows・macOS・Linuxなど主要なOSすべてでサポートされており、Webサイト開発からデスクトップゲーム制作まで、幅広いプロジェクトに活用できるのが魅力です。 macOSやLinuxではPythonが最初からインストールされていることが多い一方、Windowsではいくつか追加の手順を踏む必要があります。この記事では、WindowsでPythonをインストールし、実際に使い始めるまでの流れをわかりやすく解説します。 WindowsへのPyt