gpt4 book ai didi

c++ - 为什么我们不能在 C 或 C++ 代码中使用直接寻址?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:48:51 26 4
gpt4 key购买 nike

当我连续多次编译和执行这段代码时,它报告 cc 的地址为 0x0012FF5C。但是当我尝试使用 foo 中对 printf 的第二次调用打印出该地址处的字符串时,它打印出垃圾而不是打印出“Hello”?为什么这样??当我知道地址位于应用程序的地址空间内时(至少直到我不重新启动我的 PC,或启动其他需要大量空间的应用程序,这会导致我的申请被调出)??

void foo(char *cc[])
{
printf("%x\n",cc);
printf("%s\n",(char *)(0x0012FF5C));
}

int main()
{
char *c[] = {"Hello","World"};
foo(c);
}

最佳答案

因为 C 或 C++ 标准中没有任何东西可以保证这一点。 这些地址可能是可预测的,具体取决于您的编译器/操作系统,但不要指望它。

#include <stdio.h>

int main(void) {
char s[] = "okay";
printf("%p", (void*)s);
return 0;
}

每次我都得到一个不同的地址(Linux 上的 gcc)。不要使用“地址文字”;)

现代操作系统上的进程地址空间是随机的,以确保每次执行时的安全性:

http://en.wikipedia.org/wiki/Address_space_layout_randomization

关于c++ - 为什么我们不能在 C 或 C++ 代码中使用直接寻址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10333463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com