:: reverse dictionary ::
※ソースファイルについて
メモリ領域を再割り当てするには、realloc 関数を使います。
#include <stdio.h> #include <stdlib.h>
int *mem; /* mem[0], mem[1], mem[2] を割り当てる */ mem = (int *)malloc(sizeof(int) * 3); if (mem == NULL) { printf("メモリ領域の割り当てに失敗しました。\n"); return EXIT_FAILURE; } mem[0] = 1; mem[1] = 2; mem[2] = 3; /* mem[3], mem[4] を増やす */ mem = (int *)realloc(mem, sizeof(int) * 5); if (mem == NULL) { printf("メモリ領域の再割り当てに失敗しました。\n"); } else { mem[3] = 4; mem[4] = 5; printf("mem[0]=%d\n", mem[0]); printf("mem[1]=%d\n", mem[1]); printf("mem[2]=%d\n", mem[2]); printf("mem[3]=%d\n", mem[3]); printf("mem[4]=%d\n", mem[4]); } free(mem);
再割り当てに成功した場合は、次のような出力になります。
(mem に int のサイズ × 5 バイト分の領域が割り当てられます)
mem[0]=1 mem[1]=2 mem[2]=3 mem[3]=4 mem[4]=5
void *realloc(void *m, size_t sz)
すでに割り当てられているメモリ領域 m を sz バイトのメモリ領域に再割り当てします。
再割り当てに成功した場合は、元のメモリ領域を解放します。 再割り当てに失敗した場合は、元のメモリ領域を解放しません。
m … 再割り当てするメモリ領域
sz … 新しいメモリ領域のバイト数
・再割り当て成功 … 再割り当てしたメモリ領域へのポインタ
・再割り当て失敗 … NULL
割り当てたメモリ領域は、必ず free 関数で解放する必要があります。
Copyright (C) 2005-2007 Noto Watabe. All rights reserved.
e-mail:wmh@always-pg.com