realloc 【V1.02以降】


メモリを再割り当てします。

[所属]

標準ライブラリ

[指定形式]

#include <stdlib.h>

void __near * __far realloc(void __near *ptr, size_t size);

[戻り値]

領域の割り付けに成功した場合,その領域へのポインタを返します。

sizeが0の場合,あるいは領域を割り付けられない場合はnullポインタを返します。

[詳細説明]

ptrが指す領域をsizeが示す大きさに変更します。

再割り当て前の大きさと,sizeの小さい方までの領域の内容は変わりません。

大きさが増加する場合,増加分の領域は初期化されません。

ptrがnullポインタの場合は,“malloc(size)”と同じ動作をします。

ptrがnullポインタ以外でsizeが0の場合は,“free(ptr)”と同じ動作をします。

それ以外で,ptrがcalloc,malloc,およびreallocで割り付けた領域でない場合,または,ptrがfreeおよびreallocによって既に解放されていた場合,動作を保証しません。

 

【Professional版のみ】 【V1.03以降】

セキュリティ機能用malloc系ライブラリを使用する場合,次の操作を行った場合に__heap_chk_fail関数を呼び出します。

-

calloc,malloc,reallocで割り付けた領域以外のポインタをfree,reallocに渡す。

-

freeで開放した後のポインタを再度free,reallocに渡す。

-

calloc,malloc,reallocで割り当てた領域の外側(前後各2バイト)に何らかの値を書き込んだ後,割り当てた領域を指すポインタをfree,reallocに渡す。

 

__heap_chk_fail関数はユーザが定義する必要があり,動的メモリ管理の異常時に実行する処理を記述します。

__heap_chk_fail関数を定義する際には,次の項目に注意してください。

-

__heap_chk_fail関数は,返却値および引数の型がvoid型のfar関数とします。
void __far __heap_chk_fail(void);

-

__heap_chk_fail関数内で再帰的にヒープ・メモリ領域の破壊を検出しないでください。

 

セキュリティ機能用のcalloc,malloc,およびreallocは,領域外への書き込みを検出するために前後各2バイト余分に領域を割り当てます。このため,通常より多くヒープ・メモリ領域を消費します。

[注意事項]

ヒープ・メモリ領域のデフォルト・サイズは0x100バイトです。

ヒープ・メモリ領域を変更する場合は,配列_REL_sysheapを定義し,配列のサイズを変数_REL_sizeof_sysheapに設定してください。

【ヒープ・メモリ領域設定例】
#include <stddef.h>
#define SIZEOF_HEAP  0x200
char _REL_sysheap[SIZEOF_HEAP];
size_t _REL_sizeof_sysheap = SIZEOF_HEAP;

備考

配列_REL_sysheapは,偶数番地に配置してください。