2011-01-17 10 views

答えて

3

簡潔に:いいえ

Cは、手動で実行しない限り、ランタイムチェックを実行しません。

無効なアクセスを防ぐために、独自の関数、マクロ、バッファ単位のブックを使用することができます。ただし、このインターフェイスをどこでもにする必要があります。つまり、そのバッファに直接アクセスできなくなります。

また、余分な条件チェックのためにパフォーマンスに影響が見られます。範囲外のアクセスを引き起こさないことが判明しているコードブランチに対して直接アクセスを使用することで、その一部を回避できる可能性があります。

EDIT:

「不正なアクセスが検出されると、コードが何をすべき」のではなく、主要な問題もあります。他の言語で例外が発生したかのように、プログラムがエラーを出力して終了するかどうかエラーを無視すべきか?それを修正する必要がありますか?

この問題を解決するCの方法は、各コードのブランチ/パートが安全であることを確認することです。

1

短い答え:いいえ。

は長い答え:
が範囲外に行かないbuffer[ULLONG_MAX]ほど愚かであっても、何かを確保するために、あなたがあなたのバッファを宣言する必要がバインド最大の整数よりも大きいですシステム上で表現可能である。このようなバッファが必要とするメモリの量を除いて、これは明らかに不可能です。

実用的な解決方法は、手動でバッファのサイズを追跡し、バッファへの信頼できないインデックスをバッファサイズと照合することです。

1

デバッグ補助として使用されているMemory Safety Checkerを参照して、配列またはバッファでエラーが発生したかどうかを判断するためにCコードを計測します。これはvalgrindできない問題を見つける。

関連する問題