確保した領域の大きさを変える

 要するに「realloc()」の使い方に関して。



 realloc()を使う際に、


buffer = realloc( buffer, new_size );
こうすると、失敗することがある。

…というか、僕の環境だと失敗する。*1

 そんなわけで、僕は↓のような関数を作って使ってます。


/*=====================================
確保した領域のサイズを変更する
--- ori_pointer:領域のポインタ,
size:変更後のサイズ
=====================================*/

void *ReAllocate( void *ori_pointer, size_t size )
{
void *new_pointer = realloc( ori_pointer, size );

return new_pointer;
}

これを上の例文のようにして使うだけ。

ちなみに、↓でもOKかな?


/*=====================================
確保した領域のサイズを変更する : realloc()無しで
--- ori_pointer:領域のポインタ,
size:変更後のサイズ,
ori_size:変更前のサイズ
=====================================*/

void *ReAllocate( void *ori_pointer, size_t size, size_t ori_size )
{
void *new_pointer = calloc( size, sizeof(char) );

memcpy( new_pointer, ori_pointer, ori_size );
free( ori_pointer );

return new_pointer;
}

でも、元のサイズが要るから面倒かな…。




*1:友人に聞いてみたら「元の領域を開放しちゃうからじゃない?」と言っていたけど。
…よく考えるとそれでも失敗はしないような…?