如果有两个程序在运行,其中一个程序将数字存储在内存地址中,我知道这个内存地址,并将它硬编码到第二个程序中并打印出该地址的值,那么它是否实际上获得了该信息?C++允许程序访问存储在RAM中的任何数据,无论是否属于程序吗?
如果有两个程序在运行,其中一个程序将数字存储在内存地址中,我知道这个内存地址,并将它硬编码到第二个程序中并打印出该地址的值,那么它是否实际上获得了该信息?C++允许程序访问存储在RAM中的任何数据,无论是否属于程序吗?
不,你会得到一个“分段错误”。
如果我尝试运行这段代码:
int main(int argc, char *argv[]) {
int *ptr = (int*) 0x1234;
*ptr = 10;
}
除非进程已经为某些原因分配了0x1234,否则我会得到一个段错误,这是操作系统告诉您不允许那样做的方式。通常它们发生在您使用指针进行复杂操作时,但也可能发生其他地方。
默认情况下,它们将立即终止您的程序,除非您正在调试器中运行或已注册信号处理程序以继续您的程序
编辑:如果您真的想要,有方法可以让操作系统允许您这样做,调试器等使用此方法。