多くの C/C++ アプリケーションは、標準のメモリー割り当て関数を使用してメモリーの大きなチャンクを割り当てた後、独自のカスタムメモリー割り当て関数を定義してこれらの大きなチャンクを小さなチャンクに割り当てます。カスタムメモリー割り当て関数を含むモジュールにポインターチェッカーを使用すると、これらのカスタム関数による各メモリー割り当てに、大きなチャンクからの範囲情報が含まれます。
カスタム・メモリー・アロケーター関数のポインターに正しい範囲情報を作成するには、__chkp_make_bounds() 組込み関数を使用します。
例えば、ポインターを返すカスタム・メモリー・アロケーター関数を作成する場合を考えます。リターンポインターに正確な範囲情報を追加するには、戻り値に __chkp_make_bounds() 組込み関数を使用します。
void *myalloc(size_t size)
{
// メモリーの大きなチャンクを小さなチャンクに
// 割り当てるコード
// ポインターに範囲情報を追加
return __chkp_make_bounds(p, size);
}
C++ の new 演算子をオーバーライドすると、同じ手法を使用してリターンポインターに範囲情報を追加できます。