c-使用所声明的变量分配内存是定义的行为吗



我今天正在查看android的libusb端口,我注意到这行代码:

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

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

这是精细且定义良好的行为

sizeof在编译时求值,除非操作数是VLA,否则不求值操作数。(因此,没有无效的指针引用,因为它可能看起来像

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

引用C11,第6.5.3.4章

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

相关内容

  • 没有找到相关文章