ダングリング参照
すでに存在しないオブジェクトを指すポインタや参照。参照外しすると、意図しないデータを読み書きする。Adaの参照マニュアルは、これを参照した実行をerroneous(結果が規格で定まらない)としている。
- 概念URI
https://comcomponent.com/knowledge/dangling-pointer/
- 別名・表記
- dangling reference / dangling pointer / ダングリングポインタ
- 最終確認日
- 2026-08-01
- 機械可読データ
- JSON-LD
この概念が関わる関係
- Ada.Unchecked_Deallocationはダングリング参照の原因になることがあります。Free(X)のあとXはnullになるが、同じオブジェクトを指していたほかのアクセス値は元のアドレスを持ったまま残る。それを参照した実行はerroneousで、GNAT 13.3では例外にならなかった。 / 確度: 確立した関係 / 確認日: 2026-11-01 出典
- アクセシビリティ規則はダングリング参照を防ぎます。寿命の短い変数を指す値を寿命の長いアクセス型に保存することを、静的に分かればコンパイルエラーで、匿名アクセス型の引数のように実行時まで分からなければProgram_Errorで止める。Unchecked_Deallocationで解放した領域を指すアクセス値は、この検査では防げない。 / 確度: 条件付きの関係 / 確認日: 2026-11-01 出典
- SPARKはダングリング参照を防ぎます。SPARKはアクセス型に所有権の規則を課し、確保した領域に読み書きできるアクセス値を同時に1つに限る。本記事の例では、所有権がBに移ったAを解放しようとした行を、GNATproveが--mode=check_allの検査でエラーにした。 / 確度: 条件付きの関係 / 確認日: 2026-11-01 出典
- ダングリング参照はValgrindで確認できます。本記事の例では、解放済みの領域をダングリング参照で読んでもGNATは例外を出さず、ValgrindのMemcheckがInvalid readとして報告した。 / 確度: 条件付きの関係 / 確認日: 2026-11-01 出典
- 借用チェッカーはダングリング参照を防ぎます。スコープを出た変数への参照を残す書き方は、借用チェッカーがコンパイルエラー(E0597)にする。 / 確度: 確立した関係 / 確認日: 2026-11-01 出典
- アクセシビリティ規則はダングリング参照を防ぎます。ローカル変数を指すアクセス値をより外側のアクセス型の変数に入れるコードはコンパイルエラーになる。ただし Unchecked_Access などの unchecked な機能を使った場合と、Unchecked_Deallocation で解放した後の使用は防がない。 / 確度: 条件付きの関係 / 確認日: 2026-11-01 出典 出典
- Ada.Unchecked_Deallocationはダングリング参照の原因になることがあります。Free(X) は X だけを null にし、同じ領域を指す別のアクセス変数は残る。それを参照外しした実行は誤った実行になる。 / 確度: 確立した関係 / 確認日: 2026-11-01 出典
- 所有権ポリシー(SPARK)はダングリング参照を防ぎます。所有権を移した後の変数を通した書き込みは、GNATprove が移動後の使用としてエラーにする。SPARK_Mode を Off にした部分は解析されない。 / 確度: 条件付きの関係 / 確認日: 2026-11-01 出典
- unsafe Rustはダングリング参照の原因になることがあります。生ポインタは有効なメモリを指す保証がなく、unsafe での参照外しはコンパイラが検査しない。 / 確度: 条件付きの関係 / 確認日: 2026-11-01 出典
この概念を扱う記事
一次資料
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。