このエントリーをはてなブックマークに追加


動的メモリサイズを拡張する・realloc

malloc関数を使用することにより指定したサイズ(バイト)のメモリを取得することができます。
その後、取得したメモリサイズを拡張したい場合は、realloc関数を使用することによりメモリサイズを広げることができます。 以下にC言語のサンプルソースと実行例を記します。


スポンサーリンク

関連記事

realloc書式など

realloc関数の書式などを以下に記します。

  • インクルードが必要なファイル
    #include <stdlib.h>
  • reallocの書式
    void *realloc(void *ptr, size_t size);
  • 戻り値
    拡張したあとのメモリの先頭アドレス
  • 引数
    1つ目: mallocで取得済みのポインタ
    2つ目: 取得するサイズ

reallocのCサンプルコード

以下にreallocを使ったCサンプルコードを記します。
最初に5バイト+1バイト(NULL)のエリアを確保し、12345をstrcpyを使って確保したメモリにセットしています。
次に更に5バイト拡張し、67890をstrcatを使って文字列連結しています。
表示後、free関数にてmalloc,reallocで取得したメモリを解放しています。

filerealloc.c (改行コードLF)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>


int main(void)
{
    char *p = NULL;

    p = malloc(5+1);
    if (p == NULL) {
        perror("malloc() error!");
        exit(EXIT_FAILURE);
    }

    strcpy(p, "12345");
    printf("p = %s\n", p);

    p = realloc(p,10+1);
    strcat(p, "67890");
    printf("p = %s\n", p);

    return 0;
}

上記Cサンプルコードをコンパイルし実行した結果です。

$ gcc realloc.c -o realloc
$ ./realloc 
p = 12345
p = 1234567890

サンプルソースで+1している理由は、文字列の終端のNULLが格納されるエリア(1バイト)を追加しています。
以上、reallocによる動的メモリの取得のサンプルコードでした。


スポンサーリンク

添付ファイル: filerealloc.c 438件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 21:01:00