確保した領域の大きさを変える
要するに「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:友人に聞いてみたら「元の領域を開放しちゃうからじゃない?」と言っていたけど。
…よく考えるとそれでも失敗はしないような…?