2016-04-22 5 views
0

私は他のプログラムで使用されていたメモリにアクセスしようとしていましたが、少し奇妙な結果が出ました。 最初に私の最初のプログラムで変数を作成し、それに10の値を与えました。次に、そのアドレスを見て、私の2番目のプログラムのポインタに手動で設定しました。その後、私はポインタを逆にしようとしましたが、私の驚きには、プログラムはクラッシュしませんでした。代わりに、デフレンドされたポインタの値を0として出力します。 次は、これを試すためのいくつかのプログラムを作成しました。私の最初のプログラムでは、ポインタを作成し、それに「新しいint」を割り当てました。次に、intのアドレスをチェックし、手動で2番目のプログラムの別のポインタに割り当てました。今、私が第2のプログラムのptrをデフレンスにしようとするとクラッシュしました。 誰かが違いが起こった理由を説明できますか?なぜ、デフレレンスされたポインタは0ですか? 愚かな疑問をおかけして申し訳ありません:/他のプログラムのメモリへのアクセス

+0

あなたが何をしているか知るまで... _don't_。未知の知識があっても、生のメモリへのアクセスは難しく、危険です。お使いのOS /実装がどのようにメモリを管理し、1つのプロセス内でメモリを操作し、練習するかを確かなものにして、他のプログラムで使用されているメモリにアクセスすることについて実験を開始してもよいでしょう。ちょうど冗談 - まだしないでください。 –

答えて

1

これは、プログラムが表示するアドレスが仮想アドレスであるためです。仮想アドレスは個々のプログラムのメモリ空間に関連しています。実行時にオペレーティングシステムによって物理メモリアドレスに変換されます。

実際には、あなたのプログラムの実際の(物理的な)メモリアドレスに別のものからアクセスしていませんでした。これは、ポインタ値が0に設定されている理由です。