Dangling pointer とは

コンピュータプログラミングにおけるポインタやワイルドポインタのぶら下がりは、適切な型の有効なオブジェクトを指さないポインタです。これらはメモリ安全違反の特別なケースです。より一般的には、ダングリング参照やワイルド参照は、有効な宛先に解決されない参照であり、インターネット上のリンク腐敗などの現象を含みます。
ポインタの値を変更せずに、参照のあるオブジェクトが削除または割り当て解除されたときにオブジェクトの破棄中にダングリングポインタが発生し、ポインタが割り当てられていないメモリのメモリ位置を指しています。システムは、以前に解放されたメモリを再割り当てする可能性があり、プログラムが(現在の)ダングリングポインタを逆参照すると、メモリが完全に異なるデータを含む可能性があるため、予期しない動作が発生する可能性があります。プログラムがダングリングポインタによって参照されるメモリに書き込む場合、無関係なデータの静かな破損が発生し、微妙なバグが発見される可能性があります。メモリが別のプロセスに再割り当てされている場合、不一致ポインタを参照解除しようとすると、セグメンテーション違反(UNIX、Linux)または一般保護違反(Windows)が発生する可能性があります。プログラムがカーネルのメモリアロケータによって使用される簿記データを上書きするのに十分な特権を持っている場合、破損はシステムの不安定さを引き起こす可能性があります。ガベージコレクションを使用したオブジェクト指向言語では、到達不能なオブジェクトを破棄するだけでダングリング参照が防止されます。つまり、受信ポインタがないためです。これはトレースまたは参照カウントのいずれかによって保証されます。しかし、ファイナライザはオブジェクトへの新しい参照を作成し、オブジェクトの復帰を必要とし、参照がぶら下がってしまうのを防ぐことができます。
ワイルドポインタは、いくつかのプログラミング言語で可能な既知の状態に初期化する前にポインタが使用されたときに発生します。多くのコンパイラは、宣言された変数が初期化される前にアクセスされると、コンパイル時に警告を発するため、不明瞭なままでいる可能性は低くなりますが、それらは不明瞭なポインタと同じ不規則な動作を示します。