当你创建一个负长度的数组时,C语言会发生什么?
例如:
int n = -35;
int testArray[n];
for(int i = 0; i < 10; i++)
testArray[i]=i+1;
这段代码能够编译通过(启用-Wall选项时没有警告),似乎可以对testArray[0]
进行赋值而没有问题。但是,如果超出了数组范围,就会出现段错误或非法指令错误,并且从数组中读取任何内容都会显示"Abort trap"(我不熟悉这个错误)。我意识到这有点学术性质,希望在实际生活中永远不会出现,但是C标准是否有特别的方法来处理这样的数组?还是这因编译器而异?
for
语句的末尾有一个意外的分号 (;
),我想是这个问题的原因... - Arun