2017-03-04 86 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