将指针分配给特定内存地址并更改其值后出现分段故障



好的,我有一个在linux上读取外部虚拟内存的工作程序。这就是我想要做的:程序1被执行并且在存储器中具有特定地址以与程序2通信。我知道程序2正在工作,它正在向程序1读取值并从程序1写入值我一直在制作程序2,我有这样的代码:

#include <iostream>
using namespace std;
int main()
{
int* i;
i = (int*)0x7ffABCDDCBA1;
*i = 1;
cout << *i << " " << i << endl;
}

注:

这只是一个测试代码,看看它是否工作(不工作(

程序1将在程序2的pid读取0x7ffABCDCBA1,它编译得很好,但在执行时我得到了"分段错误">

注:

#include <iostream>
using namespace std;
int main()
{
int* i;
i = (int*)0x7ffABCDDCBA1;
cout << i << endl;
}

运行良好

您正在访问某个随机内存位置,该位置很可能不属于您的进程地址空间,因此会导致未定义的行为。

您应该在进程之间使用共享内存:如何在Linux中使用共享内存。

其他技术很少,但这一种最常用于此目的。

最新更新