2013-04-10 58 views
1

爲什麼指定位置的地址不斷變化?內存中發生了什麼事情會導致這種情況發生,或者我的printf聲明有什麼問題?爲什麼每次編譯時內存地址都會改變?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 

     char blocks[3] = {'A', 'B', 'C'}; 

     char *ptr = &blocks[0]; 

     char temp; 

     temp = blocks[0]; 
     printf(" %c, %d ", temp, &temp); 

     return 0; 
} 

輸出

A, 1764940775 
A, 1731746791 
+1

「指向位置」,即'temp',是一個char char變量;不是你的緩衝區,指向它的指針,或者任何與它相關的任何東西(雖然它們也在堆棧中)。這就是說,做到10,000次,你會看到模式形式。 – WhozCraig 2013-04-10 03:09:46

回答

0

您應該使用%p轉換說明的printf的指針值。但沒有理由期望它每次都是相同的價值。但是,全局變量或靜態變量應該位於一致的位置。

2

看起來像你的堆棧指針是隨機的。我懷疑這是因爲地址空間佈局隨機化,它被用作大多數新操作系統的安全機制。

相關問題