当在这里回答我的另一个答案的评论时,我发现我认为可能是 C 标准中的一个漏洞(c1x,我没有检查过早期的标准,是的,我知道我独自一人在所有星球的居民在标准中发现了一个错误)。信息如下:
- 第 6.5.3.4 节(“sizeof 运算符”)第 2 段状态
"The sizeof operator yields the size (in bytes) of its operand"
。 - 该节第 3 段规定:
"When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1"
. - 第 7.20.3.3 节描述
void *malloc(size_t sz)
但它所说的只是"The malloc function allocates space for an object whose size is specified by size and whose value is indeterminate"
. 它根本没有提到参数使用什么单位。 - 附件 E 开头的 8 是最小值,
CHAR_BIT
因此字符的长度可以超过一个字节。
我的问题很简单:
在一个 char 为 16 位宽的环境中,将malloc(10 * sizeof(char))
分配 10 个字符(20 个字节)还是 10 个字节?上面的第1点似乎表示前者,第2点表示后者。
任何比我拥有更多 C-standard-fu 的人对此有答案吗?