Jim Trevor の「Cyclone: A safe dialect of C」を PL クラスに使用しながら、C を理解しようとしています。Trevor と彼の共著者は、C の安全なバージョンを作成しようとしているため、言語で初期化されていないポインターを排除しています。ちょっとググって初期化されていないポインターでは、初期化されていないポインターがメモリ内のランダムな場所を指しているように見えます。これだけでは安全ではないようです。初期化されていないポインタを参照すると、メモリの安全でない部分にジャンプします。限目。しかし、トレバーがそれらについて話している方法は、それがより複雑であることを暗示しているようです. 彼は次のコードを引用し、関数 FrmGetObjectIndex が f を逆参照するとき、有効なポインターではなく、予測不可能なアドレス (f のスペースが割り当てられたときにスタック上にあったもの) にアクセスしていると説明しています。
Trevor は、「f のスペースが割り当てられたときにスタックにあったものは何でも」とはどういう意味ですか? 「初期化されていない」ポインタは、デフォルトでメモリ内のランダムな場所に初期化されていますか? または、それらの「ランダムな」動作は、スタックでの予期しない動作のために、これらのポインターに割り当てられたメモリが奇妙な値で満たされる (参照される) ことに関係していますか?
Form *f;
switch (event->eType) {
case frmOpenEvent:
f = FrmGetActiveForm(); ...
case ctlSelectEvent:
i = FrmGetObjectIndex(f, field); ...
}