- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:読み込み中にアクセス違反が発生しました、と出ます。これを回避することは)
アクセス違反が発生する問題の回避方法とは?
このQ&Aのポイント
- アクセス違反が発生する問題について、回避方法を知りたい。
- C++でポインタを利用したプログラムを実行しているが、アクセス違反が発生して停止してしまう。
- ポインタに代入したアドレスを表示するために、アクセス違反を回避する方法を教えてほしい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 もう少し突っ込んで話をすると、今のOSはたいてい仮想アドレス方式で各プロセスのアドレス空間はそのプロセス内でのみ有効なものです。 つまり、プロセスAの0番地とプロセスBの0番地は値は同じでも全く別の箇所を指しているということです。 ですが、プログラムの中には複数プロセスで協調動作させる等の理由により質問のような他プロセスが扱うメモリの中身を参照・変更したい場合があります。 それを実現するのが共有メモリ等の機構である訳です。
その他の回答 (2)
- D-Matsu
- ベストアンサー率45% (1080/2394)
回答No.2
別のプログラムのアドレス空間にはアクセスできません。 そういうことをやるには共有メモリを使ってください。
- magicalpass
- ベストアンサー率58% (378/648)
回答No.1
> 具体的に言うと、上記のプログラムではない別のプログラムを実行し、そのプログラムで宣言した変数のアドレスを表示させます。そしてそのプログラムが動いている最中に、上記のプログラムを起動させ、ポインタpにその変数のアドレスを代入して、表示させようとしました。 一般的にそういうアクセスはOSが禁じているので出来ません。OSがエラーを出しているのでC/C++のプログラミングの問題ではありません。 自作OSとかでそういう保護機能がない場合は可能でしょうけど。欲しければ自分で作ってください。 共有メモリ等の機能を使えば、その範囲でなら可能となりますが、OSの記載が無いのでそれ以上はなんとも言えません。
質問者
お礼
ありがとうございました。参考にします。
お礼
成程、そういうことですか。 わざわざありがとうございました。