Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。
Q&A
解決済
2回答
1653閲覧
総合スコア17
0グッド
1クリップ
投稿2021/02/01 05:48
0
1
タイトルの通りです。 Rustで参照外し(生ポインタがさす変数を*で得る行為)が危険とされる理由は何でしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
質問へのコメント
回答2件
ベストアンサー
端的に言えば、生ポインタの参照外しが危険である場合がある理由は、有効なデータがあるメモリを指していることが保証されていないからです。 既に解放されているメモリを指している生ポインタの参照外しを行った場合、既に無効であるメモリを読み書きするわけですから、メモリ破壊という危険性があります。 Rustの(safeな)参照はライフタイムにより管理されていますから、このような問題は起きません。
なお、以上の話は特にRustに限った話ではなく、C/C++でも元から危険性のある操作です。 ガベージコレクションのある言語の場合は最後の参照が消えるまで指す先のメモリを保持し続けるため、無効であるメモリを読むことはありませんが、ガベージコレクションを行う必要があります。
投稿2021/02/01 06:15
総合スコア148
回答へのコメント
2021/02/01 14:43
ポインタのデリファレンスは未定義動作を引き起こす可能性があるためです。 Safe Rust(unsafeを使わない)では未定義動作が起こらないことが保証されているので、Safe Rustの範疇ではポインタをデリファレンスすることはできません。
unsafe
総合スコア172
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
15分調べてもわからないことはteratailで質問しよう!
ただいまの回答率85.36%
質問をまとめることで思考を整理して素早く解決
テンプレート機能で簡単に質問をまとめる
Rustで参照外しが危険な理由はなんですか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/01 14:43