我正在学习在C中进行测试,并且正在从某个站点下载的C小结中阅读。 这是写不允许写arr[i]
其中i
是一个变量。唯一的方法是使用malloc。
不过,我写了下面的代码,它编译没有警告,并没有在Valgrind的错误:声明一个非恒定大小变量的数组
int index = 5;
int a4[index];
a4[0] = 1;
a4[1] = 2;
int index2;
scanf("%d",&index2);
int a5[index2];
a5[0] = 1;
a5[1] = 2;
那么,什么是落后数组声明的真相? 谢谢!
作为警告:我会建议不要相信在互联网上发现的C的摘要太多;我最近花了很多时间在回顾C和C++的准备面试时发现,大多数互联网“学习指南”中都有不准确或误导性的信息。我会推荐[一本很好的入门书](http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list),通常这类书不包括C99功能,因为它们不太常用。 – 2010-09-28 16:21:52
虽然它们在C99中是合法的,但除非您已将表达式的值用作数组大小,否则VLA非常危险。他们可以很容易地导致堆栈溢出(不是那种好的:-)和堆内存的破坏。 – 2010-09-28 17:06:29