アプリ版:「スタンプのみでお礼する」機能のリリースについて

読み込み中にアクセス違反が発生しました、と出ます。これを回避することはできますか?

C++でプログラミングをしています。
現在、ポインタ(p)に入れたアドレスをずらしていって、メモリの任意の位置の値を表示する、というプログラムを制作しています。

具体的に言うと、上記のプログラムではない別のプログラムを実行し、そのプログラムで宣言した変数のアドレスを表示させます。そしてそのプログラムが動いている最中に、上記のプログラムを起動させ、ポインタpにその変数のアドレスを代入して、表示させようとしました。

しかし、止まってしまいます。デバッグしてみると、「test.exe の 0x00024ad5 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x0014fde8 を読み込み中にアクセス違反が発生しました」と出ます。

なんとかこれを回避して、ポインタに代入したアドレスを表示さすことはできませんか?
宜しくお願いします。

ちなみに、自分がかなり妙なことをしているのは自覚しているつもりです。

A 回答 (3件)

#2です。


もう少し突っ込んで話をすると、今のOSはたいてい仮想アドレス方式で各プロセスのアドレス空間はそのプロセス内でのみ有効なものです。
つまり、プロセスAの0番地とプロセスBの0番地は値は同じでも全く別の箇所を指しているということです。

ですが、プログラムの中には複数プロセスで協調動作させる等の理由により質問のような他プロセスが扱うメモリの中身を参照・変更したい場合があります。
それを実現するのが共有メモリ等の機構である訳です。
    • good
    • 1
この回答へのお礼

成程、そういうことですか。
わざわざありがとうございました。

お礼日時:2010/07/27 21:49

別のプログラムのアドレス空間にはアクセスできません。


そういうことをやるには共有メモリを使ってください。
    • good
    • 0

> 具体的に言うと、上記のプログラムではない別のプログラムを実行し、そのプログラムで宣言した変数のアドレスを表示させます。

そしてそのプログラムが動いている最中に、上記のプログラムを起動させ、ポインタpにその変数のアドレスを代入して、表示させようとしました。

 一般的にそういうアクセスはOSが禁じているので出来ません。OSがエラーを出しているのでC/C++のプログラミングの問題ではありません。
 自作OSとかでそういう保護機能がない場合は可能でしょうけど。欲しければ自分で作ってください。

 共有メモリ等の機能を使えば、その範囲でなら可能となりますが、OSの記載が無いのでそれ以上はなんとも言えません。
    • good
    • 0
この回答へのお礼

ありがとうございました。参考にします。

お礼日時:2010/07/27 21:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A