Недавно я на несколько дней не ходил в школу и хотел провести небольшой эксперимент (ы) по программам на C ++, связанный с адресом памяти.
Я хотел бы видеть, что если текущая работающая программа (пусть назовем ее Программой A), которая создала указатель на объект int в куче, может быть увидена другой программой и изменена (Программа B).
Так что для Программы А это мой основной код:
// 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