Unison OSは、参照されたNULLポインタ、範囲外のインデックスアクセス(書き込みではない)、および初期化されていない変数の使用をどのように処理しますか?

Unison OSは、参照されたNULLポインタ、範囲外のインデックスアクセス(書き込みではない)、および初期化されていない変数の使用をどのように処理しますか?

特定の特定のC言語ソースコードが以下で実行されていることを確認したいと思います。統合オペレーティングシステム衝突を引き起こす可能性があるパスとパスは何であるかを考えてみましょう。コードの特定の部分では、時々ヌルポインタを逆参照し、範囲外の配列インデックスにアクセスしますが、書き込みせず、初期化されていない変数を使用しようとします。

Cでは動作が定義されていないため予測できませんが、私が読んだ他の議論によれば、オペレーティングシステムおよび/またはCPUはそのような場合にデフォルトの動作を持ちます。

問題のコードを所有しておらず、修正したくありません。私はこのようなもの(そして何か)がプログラムの競合を引き起こす合理的な可能性があるかどうかを高レベルで理解したいと思います。

答え1

私はあなたの一般的な状況に対処しようとします。私はUnison OSの専門家ではありません。

ヌルポインタを逆参照してみてください

プログラムがNULLポインタを逆参照する場合、プロセスはSIGSEGV

範囲外の配列インデックスにアクセスしますが、書き込むことはできません。

プロセスが結果アドレスを読み取ることができるかどうかによって異なります。結果のアドレスが読み取りに「有効」である場合、値を読み取ろうとすると、指定されたアドレスから適切なバイト数が得られます。アドレスがもはや有効でない点まで配列の終わりから「十分に」離れた場合、プロセスはSIGSEGV

初期化されていない変数の使用

メモリからバイトを読み出すと、そのバイトに最後に保存された値が返されます。プログラムに初期化されていないスタック割り当て変数があり、その変数を読み取ろうとすると、そのバイトが最後に書き込まれた内容を取得します。

関連情報