5

解放後使用の脆弱性がセキュリティ上の問題を引き起こす可能性があることはすでにわかっています。Use-after-free エラーはダングリング ポインターから発生するため、私の質問は、ダングリング ポインターがプログラムで使用されていない場合、それらは安全または良性 (それほど危険ではない) と見なされますか?

4

2 に答える 2

4

セキュリティと脆弱性の観点から質問を構成していますが、ダングリングポインターを回避するより説得力のある理由は、プログラムが早期に失敗するのを助けることだと思います.

ポインターを設定するNULLnullptr、その参照先が削除されると、簡単に認識できるエラー状態が作成され、プログラムがポインターを参照しようとするとすぐにエラーが発生する可能性があります。ポインターが割り当て解除されたメモリを参照し続けることを許可すると、後でデバッグが困難な状態になる可能性があります。

C++ ではunique_ptrshared_ptr、 などを使用すると、ダングリング ポインターに起因する問題を回避できます。

C と C++ の両方で、アドレスのサニタイズは、不適切なポインタのデファーレンスなどのメモリの乱用を見つけるのに役立ちます。clang、gcc、clang++、および g++ では、-fsanitize=addressフラグをコンパイル オプションに追加することでこのツールを使用できます (マルチスレッドではまだうまく機能しないことに注意してください)。

于 2018-01-09T23:28:39.693 に答える