gpt4 book ai didi

c - 这是使用数组未定义行为吗?

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:22 24 4
gpt4 key购买 nike

<分区>

在我发布的解决方案中,我收到评论说该解决方案包含未定义的行为。但是,我不知道如何。发布的解决方案的基础是:

typedef struct {
int n;
int a[1];
} t_x;

void example(void)
{
int i;
t_x *t= malloc (sizeof(t_x) + 99*sizeof(int));
t->n= 100;

for (i=0; i < t->n; i++)
t->a[i]= i;

free(t);
}

UB 的评论集中在数组现在有 1 个元素(如声明的)还是有 100 个元素(如分配的)。

引用标准的部分是6.5.6(指针/int加法)和6.5.2.1(数组下标)

  • “6.5.6 定义了将指针和整数相加时发生的情况。生成的指针指向数组的相应元素,如果存在这样的元素,或者指向一个元素超过末尾。否则结果未定义。”

  • “6.5.2.1 定义了 a[n]a+n 方面的含义。因此你不能说 a[n ] 如果 a 没有至少 n+1 个元素。”

对于这两个引号,评论者似乎暗示元素 a[99] 将不存在,但是,查看内存布局它显然存在:

enter image description here

请帮助我了解这是否/为什么是 UB 以及我可能预期的 UB 类型。

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