c - 双指针指向int变量覆盖内存

标签 c pointers memory int double

我直接贴代码了

#include <stdio.h>
struct A
{
    int a;
    int b;
};
int main()
{
    struct A test;
    double *p = (double *)&(test.a);
    *p = 5;

    printf("variable a: %d\n", &test.a);
    printf("variable b: %d\n", &test.b);
    return 0;
}

我在centos7中运行这段代码,编译器是gcc4.8.5 .而且我的电脑使用little end来存储。

如你所见,变量b的内存会被覆盖,我预计a0x0000 0005b0x0000 0000 .

但答案是:

variable a: 0
variable b: 1075052544

为什么变量 a0x 0000 0000b0x4014 0000

最佳答案

您的代码的行为未定义

一旦将 p 设置为非 double 类型的地址,就无法取消引用它。

要查看编译器对此输入执行的操作,请检查生成的程序集。

关于c - 双指针指向int变量覆盖内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46688641/

相关文章:

c - 有没有办法测试无效的内存位置?

c - Blowfish CBC 模式和 C 中的缓冲区溢出

c - c中函数指针的用例

c++ - 内存意识和大数据

c - 调试内存分配断言错误

linux - 即使在内存压力下,如何将可执行代码保留在内存中?在 Linux 中

c - fgets 在读取/proc/PID/maps 时陷入无限循环

java - 如何在 Java 中创建(实际上是)指针

c++ - 在特定对象实例上调用 C++ 函数指针

C++ 改变 const char 中的值