realloc

[機能]

  既に割り当てられているメモリ内の領域の大きさを変更します.以前割り当てられた領域に保存されていたデータは,realloc 関数で割り当てられた大きさに含まれる部分については保存されます(ただし,メモリ上のアドレスは通常異なります).割り当てに成功すると再割り当てられた領域へのポインタを返し,失敗すると NULL が返されます.

[形式]
#include <stdlib.h>

void *realloc(void *old, size_t num)
	old : 以前割り当てられた配列へのポインタ
	num : 新しく割り当てるバイト数		
[使用例]

  1. 領域の確保,再確保,及び,解放
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	int i1, *k1;
    /*
    		 int型整数の10個の配列を確保
    			    callocを使用(0で初期化される)
    */
    	k1 = (int *)calloc(10, sizeof(int));
    /*
    		 最初の5個に1から5を代入
    */
    	for (i1 = 0; i1 < 5; i1++)
    		k1[i1] = i1 + 1;
    	for (i1 = 0; i1 < 10; i1++)
    		printf("%2d ", k1[i1]);
    	printf("\n");
    /*
    		 配列のサイズを15に変更(10個目までのデータは保存される)
    */
    	k1 = (int *)realloc((void *)k1, 15*sizeof(int));    /* intを15個 */
    	for (i1 = 0; i1 < 15; i1++)
    		printf("%2d ", k1[i1]);
    	printf("\n");
    /*
    		 領域の解放
    */
    	free((void *)k1);
    /*
    		 int型整数の10個の配列を確保
    			    mallocを使用(内容は未定)
    */
    	k1 = (int *)malloc(10*sizeof(int));                 /* intを10個 */
    	for (i1 = 0; i1 < 10; i1++)
    		printf("%2d ",k1[i1]);
    	printf("\n");
    
    	return 0;
    }
    			
    (出力)
     1  2  3  4  0  0  0  0  0  0
     1  2  3  4  5  0  0  0  0  0  0 33 1627793056 1627793056  0 
    1627793104 1627793104  3  4  5  0  0  0  0  0 			
[参照]

malloc, calloc, free

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引