C 開発では、null ポインター例外は一般的なエラーであり、ポインターが初期化されていないか、解放された後も使用され続けている場合によく発生します。 Null ポインター例外はプログラムのクラッシュを引き起こすだけでなく、セキュリティ上の脆弱性を引き起こす可能性があるため、特別な注意が必要です。この記事では、C コードでの null ポインター例外を回避する方法について説明します。
C のポインターは、使用する前に初期化する必要があります。初期化されていない場合、ポインタはランダムなメモリ アドレスを指すことになり、Null ポインタ例外が発生する可能性があります。ポインタを初期化するには、空き領域を指すか、NULL ポインタに設定します。例:
int* p = nullptr; // C 11 の Null ポインタ
int* q = new int; // メモリに適用し、q をメモリにポイントします
ポインタを使用する前に、ポインタが null かどうかを確認し、null の場合は使用し続けることを避けてください。 C では、if ステートメントまたは三項演算子を使用して、ポインターが null かどうかを確認できます。例:
if (p != nullptr) {
// 使用p
}
else {
// 处理空指针异常
}
int a = p ? p : 0; //三項演算子、p が空でない場合は p を、それ以外の場合は 0
スマート ポインターを使用しますC コードでの null ポインター例外のリスクを軽減できます。スマート ポインターは、ポインターをカプセル化するクラスであり、ポインターのライフ サイクルを自動的に管理し、不要になったポインターを自動的に解放できます。 C 11 では、shared_ptr と unique_ptr という 2 種類のスマート ポインターが導入されました。
shared_ptr を使用すると、複数のポインターが同じオブジェクトを共有できるようになり、すべてのポインターがそのオブジェクトを参照しなくなったときに、そのオブジェクトが自動的に削除されます。 unique_ptr では、1 つのポインタのみがオブジェクトの所有権を持つことができ、ポインタの有効期限が切れるとオブジェクトが自動的に削除されます。
解放されたポインターを解放すると、未定義の動作が発生します。これを回避するには、ポインタを解放する前に nullptr に設定します。例:
delete p;
p = nullptr;
ポインターを使用する場合一時オブジェクトのポインタはスタックに保存されますが、一時オブジェクトが破棄されると、ポインタは解放されたメモリを指すことになり、null ポインタ例外が発生します。これを回避するには、new 演算子を使用してオブジェクトをヒープに配置し、スマート ポインターを使用してポインターの有効期間を管理します。
概要
C 開発では、null ポインター例外を回避することが非常に重要です。 C コードにおける null ポインター例外のリスクは、ポインター変数の初期化、ポインターが null かどうかの確認、スマート ポインターの使用、解放されたポインターの解放の回避、スタック上の一時オブジェクトへのポインターの作成の回避によって効果的に軽減できます。 C コードを記述するときは、不必要なエラーやセキュリティ ホールを避けるために、ポインタの初期化と使用に必ず注意してください。
以上がC++ 開発ノート: C++ コードでの Null ポインター例外の回避の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。