是否定义了使用声明的变量分配内存的行为?

时间:2016-05-11 17:55:03

标签: c memory-management malloc sizeof undefined-behavior

我今天正在寻找一个libusb的端口用于android,我注意到这行代码:

struct usbi_pollfd *ipollfd = malloc(sizeof(*ipollfd));

似乎ipollfd是根据尚未完全分配的自身大小进行分配的。我的第一个想法是,这种行为是不确定的。是这样的吗?

1 个答案:

答案 0 :(得分:6)

精细且定义明确的行为

sizeof在编译时得到评估,除非操作数是VLA,否则不评估操作数。 (因此,没有无效指针dererefence,因为它可能看起来像

换句话说,sizeof只需知道操作数的类型(已定义)。

引用C11,章节§6.5.3.4

  

[....]如果操作数的类型是可变长度数组   type,操作数被评估;否则,不评估操作数,结果是   整数常数。