第一个元素偏移

KAc*_*ion 3 c malloc free offset

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

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

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

Alo*_*ave 6

是的,它是有保证的.会给你一个标准报价,让我查找.

C99标准:§6.7.2.1

第12段

在结构对象中,非位字段成员和位字段所在的单元具有按声明顺序增加的地址.指向适当转换的结构对象的指针指向其初始成员(或者如果该成员是位字段,则指向它所在的单元),反之亦然.结构对象中可能存在未命名的填充,但不是在其开头.