0

アドレス空間の最初のバイトを指す、または指す可能性のあるポインターを生成して使用する必要がある、奇妙な架空の組み込みシステムを考えてみましょう。つまり、ゼロに等しいポインタです。NULL ポインターではなく、完全に有効なゼロ ポインターであり、他のポインターと同様に逆参照またはインクリメントされるか、配列として扱われる可能性があります。NULL ポインターを特別なものとして扱うが、実際の NULL 型を持たない言語でこれを行うにはどうすればよいでしょうか?

4

3 に答える 3

5

一部のまれな古いマシンでは、「0とは異なる特殊な値を持つNULLポインタ」全体が可能ですが、実際には、アドレス0を指すNULL / 0ポインタは値0を持ち、ほとんどのマシンでは実際にはアドレス0を指します。 。

完全に逆参照可能であり、この領域にマップされたメモリがある場合は、そのアドレスに書き込むことができます。

以前は、使用していた組み込みプラットフォームでそれを使用していました。したがって、この領域へのすべてのアクセスはNULLポインターの逆参照であったため、以前はデバッガーウォッチポイントをアドレス0に配置していました。そのようにいくつかのエラーをキャッチしました^^

于 2012-10-11T22:10:35.517 に答える
3

ほとんどのアーキテクチャでは、NULL ポインターについて特別なことはまったくありません。これは、アドレスが 0 の通常のポインターです。実際のメモリがある組み込みシステムで作業している場合は、適切に動作するはずです。null 値のポインターをチェックしようとすると、唯一の問題が発生するため、それを行わないでください。

于 2012-10-11T22:07:02.977 に答える
0

それが役立つ場合、レジスタ定義 (特定のアドレスへのポインター) は (私の CodeWarrior のコピーに) 次のように書き込まれます。

#define REGISTER_XYZ      (*(vuint32 *)(0x40100000))

vuintに注意してください。これは、あなたに関連する場合と関連しない場合がある揮発性の場所 (私たちの制御外で変更される可能性があります) であるためです。

0x40100000 を任意のアドレスに置き換えます。

于 2012-10-12T09:23:36.503 に答える