私が知っているところから始めます:Cの標準では、理論的には何も指していない無効なポインタをNULLが参照することが必要です。したがって、たとえばmalloc()
は、エラーが発生した場合にはNULLポインタを返すべきではありません。私はNULLがしばしば((void*)0)
と表され、コンパイラはこのポインタゼロを、シンボリックなNULLポインタの理論上の必要条件を満たす実装定義済みのアドレスに変換することを知っています(本質的にアドレスは到達不能です)。オフアドレス/ポインタC
ここで、NULLと同じ正確な特性を持つが、NULL(NULL!NULL = NULL2)と区別できる別のNULL(NULL2と呼ぶことができます)が必要であるとしましょう。私はメモリ(それほどではありません)の理解から、NULLポインターは頻繁にオフリミットのメモリセグメント内のアドレスを指しています。つまり、私は、通常、単一のアドレスだけでなく、メモリのセグメント全体がオフリミットであることを意味します。だから私はNULL2をNULL + 1として定義したと言うことができます(私はおそらくあなたがひどくなるかもしれないか、おそらく少しのギャグを知っている)NULL2理論的に(私はそれを定義したように)も到達できない(同じ意味でNULLが到達できない)
答えは完全にプラットフォーム固有のものになると思いますので、例は私が探しているものです。しかしより一般的には、NULLと同じ方法で無効(または到達不能など)であることがISO-C標準によって定義されている他のポインタアドレスがあります。無効(または無効)のすべての住所の一般的な説明と、無効な理由については、参考になります。そして、あなたが私に "なぜ神の愛のためにこれをする必要があるのか"と尋ねる必要があると感じるなら、私の答えは本当に何もする必要はないということです。その仮説的な質問です。
テキストを段落に挿入します。 –
[ask]をお読みください。 – OldProgrammer
これは、この特定の動作であなた自身の言語を作成する必要がある場合は、仮想的に、あなたがこれを必要とする場合。 Cではできません。異なるものを表現しない場合は、2つの異なる種類の無効なポインタを定義することができません –