能否请您说明为什么存储了变量值,但结构的大小仍然是 0 字节?

标签 c memory structure allocation

为什么结构变量'e'没有大小,而它的元素被声明和初始化?

#include <stdio.h>

int main ()
{
  struct e1
  {
    int a[0];
  };
  struct e1 e;
  e.a[0] = 2;
  printf ("%d\n", e.a[0]);
  printf ("%d", sizeof (e));
}

输出是
2
0

最佳答案

您在这里超出了缓冲区:

e.a[0] = 2;

这会调用未定义的行为

程序不需要崩溃。事实上,它可能看起来运行得很好,但你正在浪费一些其他内存,程序可能随时崩溃。

要安全地执行此操作,您必须增加数组的大小以容纳至少一个元素:

struct e1
{
    int a[1];
};

关于能否请您说明为什么存储了变量值,但结构的大小仍然是 0 字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51175222/

相关文章:

java - Java中的字节大小枚举

linux - 在 EC2 AMI 中调整/重新调整 SWAP 内存

c - 如何在 C 中声明指向结构的指针?

c - c 中的动态分配不起作用

C. 正确处理指向函数的双指针,该函数分配一个结构并返回指向它的指针——在不同的函数中读取、显示、释放

c - 有没有办法打破 C 中的上级循环?

C 中的字符数组?

javascript - node.js 打开文件覆盖现有文件

C 变量传输返回错误

内存使用