最近、私は数日間学校を休んでおり、メモリーアドレスを扱う C++ で小さなプログラムの実験をしたいと思っていました。
私が見たかったのは、ヒープ内のintオブジェクトへのポインターを作成した現在実行中のプログラム(プログラムAと呼びましょう)が、別のプログラムによって表示され、変更できるかどうかです(プログラムB)。
プログラム A の基本的なコードは次のとおりです。
// Program A
#include <iostream>
using namespace std;
int main()
{
// Pointer to an int object in the heap
int *pint = new int(15);
// Display the address of the memory in heap
cout << pint << endl;
// Display the value stored in that address
cout << *pint << endl;
return 0;
}
プログラム A の出力:
0x641030
15
プログラム B については、次のリンクから特定のメモリ アドレスを割り当てる方法を調べました: http://www.devx.com/tips/Tip/14104
プログラム B のコードは次のとおりです。
// Program B
#include <iostream>
using namespace std;
int main()
{
// assign address 0x641030 to p
int *p = reinterpret_cast< int* > (0x641030);
cout << p << endl;
cout << *p << endl;
return 0;
}
プログラム B の出力:
0x641030
... "Crash"
よくわかりません。から 15 が表示されることを期待していましたが、予想外のことが起こりました*p
。
*p
のような番号にも割り当てようとしまし*p = 2000
たが、それを試みたときにクラッシュしました。
また、ポインターとプログラム A ( cout << &pint;
) とプログラム B ( cout << &p;
) のアドレスを表示すると、両方とも同じメモリ アドレスを示しました。
何が起こっているのか正確に知っている人はいますか?私は興味がありますが、何が起こっているのか混乱しています。また、私が試みていることを C++/C で行うことは可能ですか?
**編集**私のプラットフォームについて言及せずに申し訳ありませんが、私は現在Window 7 Professionalを使用しています