アドレス空間の最初のバイトを指す、または指す可能性のあるポインターを生成して使用する必要がある、奇妙な架空の組み込みシステムを考えてみましょう。つまり、ゼロに等しいポインタです。NULL ポインターではなく、完全に有効なゼロ ポインターであり、他のポインターと同様に逆参照またはインクリメントされるか、配列として扱われる可能性があります。NULL ポインターを特別なものとして扱うが、実際の NULL 型を持たない言語でこれを行うにはどうすればよいでしょうか?
3 に答える
一部のまれな古いマシンでは、「0とは異なる特殊な値を持つNULLポインタ」全体が可能ですが、実際には、アドレス0を指すNULL / 0ポインタは値0を持ち、ほとんどのマシンでは実際にはアドレス0を指します。 。
完全に逆参照可能であり、この領域にマップされたメモリがある場合は、そのアドレスに書き込むことができます。
以前は、使用していた組み込みプラットフォームでそれを使用していました。したがって、この領域へのすべてのアクセスはNULLポインターの逆参照であったため、以前はデバッガーウォッチポイントをアドレス0に配置していました。そのようにいくつかのエラーをキャッチしました^^
ほとんどのアーキテクチャでは、NULL ポインターについて特別なことはまったくありません。これは、アドレスが 0 の通常のポインターです。実際のメモリがある組み込みシステムで作業している場合は、適切に動作するはずです。null 値のポインターをチェックしようとすると、唯一の問題が発生するため、それを行わないでください。
それが役立つ場合、レジスタ定義 (特定のアドレスへのポインター) は (私の CodeWarrior のコピーに) 次のように書き込まれます。
#define REGISTER_XYZ (*(vuint32 *)(0x40100000))
vuintに注意してください。これは、あなたに関連する場合と関連しない場合がある揮発性の場所 (私たちの制御外で変更される可能性があります) であるためです。
0x40100000 を任意のアドレスに置き換えます。