在C++中读取内存时出现分段错误

0x6*_*773 0 c++ g++ c++11 c++14

我只是想使用两个C++代码将Value存储在特定的内存地址中

我用来将数据写入内存并获取其地址的代码:

#include <iostream>

using namespace std;

int main()
{
  int i = 10;
  cout<<&i<<endl;
  cin>>i; // This is just to make sure program doesn`t end

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

cin>>i;只是为了确保它不会结束.获取地址后int i,输入以下代码:

#include <iostream>

using namespace std;

int main()
{
  // This address changes everytime and I change it everytime
  // This is just one temporary address
  volatile int *x = (volatile int *)0x7ffef9246e74; // [1]
  int y = *x;
  cout<<y<<endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

[1]:我从这个页面复制了这一行.

程序#1在我运行程序#2时继续运行

在运行第二个代码时,我得到了segmentation fault (core dumped).有帮助吗?

Dan*_*rey 8

您的现代操作系统,编译器等工作模式是错误的.第一次运行程序时,会为进程分配一个内存空间.该内存空间中的所有内容(虚拟内存空间)都由处理器的MMU 映射到物理内存.

该过程完成后,其内存空间不再存在.下次启动同一个程序时,它将在另一个独立的内存空间中运行.它可能映射到不同的物理内存地址,甚至虚拟地址要么不相同,要么清除它们以确保没有信息从以前的进程泄漏.

这意味着当您从第一个程序输入地址到第二个程序时,它没有任何意义.更糟糕的是,第一次运行的内存地址在运行时不是第二次运行的虚拟内存空间的一部分,因此CPU的MMU检测到对内存位置的非法访问,并且您得到了seg-fault.