2016-04-22 61 views
0

我一直在尝试访问其他程序使用的内存,我遇到了一些有点奇怪的结果。 首先,我在第一个程序中创建了一个变量,并赋值为10.然后我查看了它的地址,并将其赋值为第二个程序中的指针。之后,我试图去掉指针,(令我惊讶的是)该程序没有崩溃。相反,它将derefrenced指针的值打印为0 接下来我创建了一些其他程序来对此进行实验。在我的第一个程序中,我创建了一个指针并赋值为'new int'。然后我检查了int的地址并手动将它赋值给第二个程序中的另一个指针。现在,当我试图解除第二个程序的ptr时,它确实崩溃了。 有人可以解释为什么差异发生?为什么被拒绝的指针0? 对不起,可能是一个愚蠢的问题:/访问其他程序的内存

+0

直到你知道你在做什么...... _don't_。即使您拥有正确的知识背景,原始内存访问也很困难且风险很大,这显然不是这种情况。建立一个坚实的基础,说明你的操作系统/实现如何管理内存,练习和练习在单个进程中操纵内存,然后_maybe_开始思考“围绕访问其他程序使用的内存进行实验”。开玩笑吧 - 还是不要。 –

回答

1

这是因为您的程序打印给您看到的地址是虚拟地址。虚拟地址与每个单独程序的存储空间有关。它们在运行时被操作系统转换为物理内存地址。

因此,您并未真正从另一个程序访问其中一个程序的实际内存地址。这也是为什么指针值被设置为0.