为什么每次编译时内存地址都会不断变化?

时间:2013-04-10 03:02:01

标签: c pointers

为什么尖头地址不断变化?在内存中发生了什么导致这种情况发生,或者我的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 

2 个答案:

答案 0 :(得分:2)

看起来您的堆栈指针是随机的。我怀疑这是因为地址空间布局随机化在大多数较新的操作系统中用作安全机制。

答案 1 :(得分:0)

您应该使用%p转换说明符来printf指针值。但是没有理由期望它每次都是相同的价值。但是,全局变量或静态变量应位于一致的位置。