gpt4 book ai didi

c - 具有灵活数组成员的结构并为其分配内存

转载 作者:行者123 更新时间:2023-11-30 14:49:26 26 4
gpt4 key购买 nike

我正在阅读this version of the C99 standard由维基百科链接来尝试了解灵活的数组成员如何工作。

在第 6.7.2.1 节中,声明了此结构:

struct s { int n; double d[]; };

并给出了一个例子:

s1 = malloc(sizeof (struct s) + 10);
s2 = malloc(sizeof (struct s) + 6);

它说 s1s2 的行为就像声明是:

struct { int n; double d[1]; } *s1, *s2;

它列出了您可以做的一些事情:

double *dp;
dp = &(s1->d[0]); // valid
*dp = 42; // valid
dp = &(s2->d[0]); // valid
*dp = 42; // undefined behavior

我可以明白为什么上面的最后一行是未定义的,因为 s2 只分配了 6 个额外字节,这不足以存储 double,但我不明白为什么它会说如果 s1s2 声明为:

struct { int n; double d[1]; } *s1, *s2;

s2似乎没有分配足够的内存来存储该结构时。

该文档似乎是某种草稿,所以我不确定是否有错误或者我是否误解了其含义。

最佳答案

(您不应该再研究 C99,它已经过时了。C11 是文档 n1570,与您引用的位置相同。它可能/希望很快就会被 C17 取代。)

我认为,它说它的行为就好像它有一个元素的原因是短语

If it would have no elements, such an array behaves as if it had one element but the behavior is undefined if any attempt is made to access that element...

关于c - 具有灵活数组成员的结构并为其分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49598099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com