Cpl*_*kie 3 c++ memory variable-assignment memory-address
最近我离开学校几天,想在C++中做一个处理内存地址的小程序实验.
我想看看,如果当前正在运行的程序(让它称之为程序A)创建了一个指向堆中int对象的指针,可以被另一个程序看到并进行修改(程序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;
}
Run Code Online (Sandbox Code Playgroud)
计划A的产出:
0x641030
15
Run Code Online (Sandbox Code Playgroud)
对于程序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;
}
Run Code Online (Sandbox Code Playgroud)
方案B的产出:
0x641030
... "Crash"
Run Code Online (Sandbox Code Playgroud)
我不太明白.我期待显示15 *p
,但它做了我没想到的事情.
我也尝试分配*p
一个类似的数字,*p = 2000
但是当我尝试它时它也崩溃了.
此外,当我显示指针的地址和程序A(cout << &pint;
)和程序B(cout << &p;
)时,它们都显示相同的内存地址.
有谁知道究竟发生了什么?我很感兴趣但对于正在发生的事情感到困惑.另外,我有可能做我在C++/C中尝试的事情吗?
**编辑**很抱歉不提我的平台,但我目前正在使用Window 7 Professional
Gre*_*ill 10
简短的回答是,不同的进程使用完全不同的地址空间.如果不做更多的工作,进程B就无法从进程A读取或写入内存.
可以以特定于平台的方式执行此操作.Win32提供WriteProcessMemory等函数,您可以直接将值戳入另一个进程的内存空间.大多数操作系统提供共享内存功能,使用Win32可以使用内存映射文件,而Unix风格通常具有某种等效的"mmap"或"shmem"功能.
归档时间: |
|
查看次数: |
3815 次 |
最近记录: |