2017-03-04 78 views
1
int main(void) 
{ 
int *a=6; 
printf("%d",*a); 
return 0; 
} 

在这段代码中我们直接访问一些内存地址让6,我们会得到分段错误。为什么? 我怎样才能访问它没有任何错误?我可以直接访问内存地址吗?内存管理是处理器还是OS的特性?每次访问直接内存地址,我们可以直接访问任何内存地址?

+0

[读写内存位置](http://stackoverflow.com/questions/11207783/read-and-write-to-a-memory-location) – lukeg

+0

可能重复,但如果我想访问特定的内存地址我怎么能?还有一个问题是依赖于操作系统或处理器? – sam1006

回答

1

您加载程序它不断对自身的范围属于它的地址(Address space)的 过度简化它把它想从地址假设1000至 4000你的栈和堆驻留意味着你可以仅在该范围内分配内存,单独参考这些地址和这些地址。让我们假设一个“假设”假设我们可以实际访问地址6,但在该位置,您的操作系统实际上有一些超级重要数据,并且偶然会写入该数据。 OS程序员非常聪明,不允许我们访问我们不应该访问的东西。

+0

我想访问的地址6比我怎么能? – sam1006