2013-04-10 2 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; 
} 

OUTPUT

A, 1764940775 
A, 1731746791 
+1

"pointed place"즉, temp는 단일 char 스택 변수입니다. 버퍼, 포인터, 또는 둘 중 하나와 관련된 것 (스택에도 있지만). 즉 10,000 번 반복하면 패턴이 생성됩니다. – WhozCraig

답변

0

당신은 포인터 값을 printf를 위해 %p 변환 지정자를 사용해야합니다. 그러나 매번 같은 가치가 될 것으로 기대할 이유가 없습니다. 그러나 전역 또는 정적 변수는 일관된 위치에 있어야합니다.

2

스택 포인터가 무작위로 표시되는 것처럼 보입니다. 나는 이것이 가장 새로운 운영 체제의 보안 메커니즘으로 사용되는 주소 공간 레이아웃 무작위 화 때문이라고 생각합니다.

관련 문제