【问题标题】:First element offset第一个元素偏移
【发布时间】:2012-06-09 05:19:54
【问题描述】:

这是保证,结构的第一个元素的偏移量是 0? 为了更准确,让我们考虑

struct foo {
int a;
double b;
};
struct foo *ptr=malloc(sizeof(struct foo));
int *int_ptr = &ptr->a;
free(int_ptr)

是否保证在任何操作系统或任何其他因素下始终有效?

【问题讨论】:

  • any 操作系统或 any 其他因素下?我不知道是否可以回答 - 是否在语言规范中是另一回事。
  • 你的代码不应该是int *int_ptr = &ptr->a;吗?

标签: c malloc free offset


【解决方案1】:

是的,这是有保证的。会给你一个标准的报价,让我查一下。

C99 标准:§6.7.2.1

第 12 段

在结构对象中,非位域成员和位域所在的单元 驻留的地址按照声明的顺序增加。 指向 a 的指针 结构对象,经过适当转换,指向它的初始成员(或者如果该成员是 位域,然后到它所在的单元),反之亦然。可能有未命名的 在结构对象内填充,但不在其开头。

【讨论】:

  • §6.7.2.15 似乎是正确的:“一个指向结构对象的指针,经过适当转换,指向其初始成员(或者如果该成员是位字段,则指向单元它所在的位置),反之亦然。结构对象中可能有未命名的填充,但不是在其开头
  • @DCoder:啊,你打败了我 :)
猜你喜欢
  • 2016-04-10
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 2012-10-08
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多