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

Dom*_*Dom 6 c malloc memory-management sizeof undefined-behavior

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

struct usbi_pollfd *ipollfd = malloc(sizeof(*ipollfd));
Run Code Online (Sandbox Code Playgroud)

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

Sou*_*osh 7

这是很好的,定义明确的行为.

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

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

引用C11,第6.5.3.4章

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