ポインタの範囲適合チェック
ちょっと疑問に思っただけなので実際的な問題を抱えているわけではないのですが、
ポインタとメモリブロックが与えられた時にそのポインタがメモリブロック内を指しているかどうかを調べるプログラム的方法はありますか?
例えば、
文字列(つまりポインタ)とポインタが与えられた時にポインタが与えられた文字列内を指しているか?
とか
mallocで確保したメモリ内を与えられたポインタが指しているか?
というようなことを調べる関数を書きたいということです。
例として次のような擬似コードで
bool 適合チェック(Type *メモリの最初, Type *メモリの最後, Type *調べたいポインタ){
return メモリの最初 <= 調べたいポインタ && 調べたいポインタ <= メモリの最後;
}
(あるいはbool 適合チェック(void *メモリの最初, size_t メモリのサイズ, void *調べたいポインタ)
のようなインターフェース)
みたいな感じで書きたいように思いますが、
(おそらく多くの場面で期待するように動作するだろうと思われますが)
Cの規格上ポインタが有効なメモリブロック(と+1の)範囲内であれば
比較したり減算したりということは有効ですが、
範囲外であれば、動作未定義となるのでこのようには書くことはできません。
では、実質的にCの規格に沿う形でこのような関数を記述することは出来ないのでしょうか?
できるとすればどのように記述すればいいですか?
※要素の型またはサイズが分かっている場合にはループして==
で有効ポインタを全数チェックすることで可能かもしれませんがそれは避けたいです。