繁体   English   中英

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

[英]Segmentation fault while reading Memory in C++

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

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

#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;
}

我用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;
}

[1]:我从本页复制了这一行。

我运行程序2时,程序1一直运行

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

您关于现代操作系统,编译器等如何工作的模型是错误的。 第一次运行程序时,将为该进程分配一个内存空间。 该内存空间(即虚拟内存空间)中的所有内容都通过处理器的MMU映射到物理内存。

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

这意味着当您从第一个程序输入地址到第二个程序时,该地址在那里没有任何意义。 更糟糕的是,第一次运行时的内存地址在运行时不属于第二次虚拟内存空间的一部分,因此,CPU的MMU检测到对内存位置的非法访问,并且会出现段错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM