不久前,我有一个简单的进程间通信的想法:一个进程向指针输出一个地址,我将其复制到另一个进程的输入,然后更改原始变量。
我实现了这样:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
bool p;
cin>>p;
if(p){
int n;
n=0;
cout<<&n;
cin.get();
cin.get();
cout<<n;
}else{
int *point,n;
scanf("%p",&point);
cout<<point;
cin>>n;
*point+=n;
}
return 0;
}
我使用了scanf,因为cin抱怨,并且不会编译。我尝试使用两个进程运行它,但在我启动第二个实例后,输入指针的地址,如第一个输出的那样,它就冻结了。因为我只能访问Windows,所以我不知道它是否有SIGSEGV,或者它是否做了完全不同的事情。
只是我试图改变另一个正在崩溃它的进程变量的值,还是其他阻止我的变量呢?
答案 0 :(得分:5)
你不能这样做,因为第一个进程将无法访问第二个进程&#39;内存地址空间(在常见的操作系统中,包括Windows和Linux)。
答案 1 :(得分:4)
每个进程都有自己的内存,与其他进程完全分开。指针值在不同进程的上下文中是没有意义的,即使你设法得到它。