C言語 標準関数 | 応用 | サンプル

標準関数
構文
応用

管理人

プライバシーポリシー


書式

#include <stdlib.h>

void * realloc( void *ptr , size_t len );

■戻り値:
新たに確保した領域の先頭アドレスを返す。エラー時はNULL(\0)を返す。
新たに確保した先頭アドレスは、以前のアドレスと異なる場合がある。

関連関数
説明

lenで指定された大きさの領域を新たに確保してその先頭アドレスを返す。つまり、既にmallocなどで確保された領域ptrを、新たなサイズで再確保する関数である。新たなサイズは、以前より大きくとも小さくとも構わない。エラー時はNULLを返す。

以前より大きなサイズを確保した場合、以前に確保した領域に書き込まれた内容は温存されるが、新たに増加した部分に関しては、その内容は不定である。また、以前より小さな値を確保した場合、減少した箇所は当然ながら内容は破棄されているが、それ以外の箇所の内容は温存される。

確保した領域はfreeで開放しなければならないが、プログラム終了時であればOSが自動で開放する。

サンプル

#include <stdlib.h>

main() {

  char * ptr1;
  char * ptr2;

  ptr1 = ( char * )malloc( 5 );
  if( ptr1 == NULL ) {
    printf( "メモリ確保エラー(1)\n" );
  }

  /* 確保した全領域に'a'を設定 */
  memset( ptr1 , 'a' , 5 );

  ptr2 = ( char * )realloc( ptr1 , 10 );
  if( ptr2 == NULL ) {
    printf( "メモリ確保エラー(2)\n" );
  }

  /* 新たに確保した全領域に'b'を設定 */
  memset( &ptr2[5] , 'b' , 5 );

  /* 設定した内容を確認 */
  printf( "ptr2[0]=%c\n" , ptr2[0] );/* a */
  printf( "ptr2[1]=%c\n" , ptr2[1] );/* a */
  printf( "ptr2[2]=%c\n" , ptr2[2] );/* a */
  printf( "ptr2[3]=%c\n" , ptr2[3] );/* a */
  printf( "ptr2[4]=%c\n" , ptr2[4] );/* a */
  printf( "ptr2[5]=%c\n" , ptr2[5] );/* b */
  printf( "ptr2[6]=%c\n" , ptr2[6] );/* b */
  printf( "ptr2[7]=%c\n" , ptr2[7] );/* b */
  printf( "ptr2[8]=%c\n" , ptr2[8] );/* b */
  printf( "ptr2[9]=%c\n" , ptr2[9] );/* b */

  free( ptr2 );/* 開放 */
}

実行結果

ptr2[0]=a
ptr2[1]=a
ptr2[2]=a
ptr2[3]=a
ptr2[4]=a
ptr2[5]=b
ptr2[6]=b
ptr2[7]=b
ptr2[8]=b
ptr2[9]=b

Copyright © 2008-2013 http://hitorilife.com All Rights Reserved.