【问题标题】:Why does the memory address keep changing every time I compile?为什么每次编译时内存地址都在变化?
【发布时间】:2013-04-10 03:02:01
【问题描述】:

为什么指向的地方的地址一直在变化?导致这种情况发生的内存中发生了什么,或者我的 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 

【问题讨论】:

  • “指向的地方”,即temp,是一个单字符栈变量;不是你的缓冲区,指向它的指针,或任何相关的东西(尽管它们也在堆栈上)。也就是说,做 10,000 次,你就会看到模式的形成。

标签: c pointers


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多