Sds realloc

提供:GizmoLabs - だいたい CAD LISP なサイト
構文
void *sds_realloc (void *memloc, size_t bytes);


機能
メモリのアロケーションのサイズを変更する。
メモリサイズが増える場合は、メモリ領域の内容は保存される。メモリサイズが減少する場合は、内容が部分的に失われる事もある。
いろいろなサイズで確保・開放を繰り返すとメモリ割り当てに無駄が生じてしまうので、sds_realloc を使う頻度をできるだけ減らすようなコーディングが望ましいらしい。
引数
  • *memloc : メモリ領域
  • bytes : バイトサイズ
戻り値
成功ならメモリ領域のポインター、失敗ならNULLを返す。


サンプル
int *p1, *p2;
p1 = (int*)sds_calloc(5, sizeof(int));    /* int型の要素を5個割り当て */

  /* 何かの処理 */

p2 = (int*)sds_realloc(p1, sizeof(int));  /* int型の1つの領域を再割り当て */
if( p2 == NULL )                          /* 成功したかどうか調べる */
{
  free( p1 );    /* 失敗した場合、元の領域が有効なままなので解放する */
  return 0;
}
p1 = NULL;       /* 安全策。p1 は sds_realloc() の内部で解放されているが、
                    使えないことを明確にするために NULL を代入しておく */

  /* 何かの処理 */

free( p2 );