malloc関数を使用することにより指定したサイズ(バイト)のメモリを取得することができます。
その後、取得したメモリサイズを拡張したい場合は、realloc関数を使用することによりメモリサイズを広げることができます。
以下にC言語のサンプルソースと実行例を記します。
realloc関数の書式などを以下に記します。
#include <stdlib.h>
void *realloc(void *ptr, size_t size);
以下にreallocを使ったCサンプルコードを記します。
最初に5バイト+1バイト(NULL)のエリアを確保し、12345をstrcpyを使って確保したメモリにセットしています。
次に更に5バイト拡張し、67890をstrcatを使って文字列連結しています。
表示後、free関数にてmalloc,reallocで取得したメモリを解放しています。
realloc.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による動的メモリの取得のサンプルコードでした。