gpt4 book ai didi

c - 声明一个负长度的数组

转载 作者:太空狗 更新时间:2023-10-29 16:33:47 27 4
gpt4 key购买 nike

当您创建一个负长度数组时,在 C 语言中会发生什么?

例如:

int n = -35;

int testArray[n];

for(int i = 0; i < 10; i++)
testArray[i]=i+1;

此代码将编译(并且在启用 -Wall 的情况下不会发出警告),而且您似乎可以毫无问题地分配给 testArray[0]。分配过去会导致段错误或非法指令错误,并且从数组中读取任何内容都会显示“中止陷阱”(我不熟悉那个)。我意识到这有点学术性,并且(希望)永远不会在现实生活中出现,但是 C 标准是否有任何特定的方式来处理此类数组,或者它是否因编译器而异?

最佳答案

这是未定义的行为,因为它打破了“应该”的约束:

C99 §6.7.5.2:

If the size is an expression that is not an integer constant expression... ...each time it is evaluated it shall have a value greater than zero.

关于c - 声明一个负长度的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3783282/

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