c数组:动态设置大小?

时间:2010-05-10 05:52:34

标签: c arrays

我是C编程新手。我试图使用变量设置数组的大小,但我收到一个错误:'数组'的存储大小不是常数 !!

01 int bound = bound*4;

02 static GLubyte vertsArray[bound];

我注意到当我用数字'20'替换 bounds (在第02行的括号内)时,程序将运行没有问题。但我试图动态设置数组的大小......

为什么我收到此错误的任何想法? 非常感谢,

4 个答案:

答案 0 :(得分:11)

您收到此错误是因为,正如编译器告诉您的那样,您的数组大小不是常量。在C89 / 90版本的C语言中,数组大小必须是常量。您不能“动态设置数组的大小”。如果需要运行时大小的数组,则必须使用malloc手动分配它,或者使用一些非标准的特定于编译器的方法(如alloca函数)。

在C99版本的C语言中添加了对所谓的可变长度数组(VLA)的支持。 C99编译器将接受自动数组的运行时大小的数组声明。然而,即使在C99中,您也无法声明运行时大小的静态数组,正如您所想的那样。

答案 1 :(得分:5)

要创建非常量大小的数组(即在编译时已知),您需要使用malloc()为其动态分配空间(并且当它为no时相应地使用free()解除分配空间需要更长时间)。

正如其他人所说,在C99兼容编译器中可以使用声明动态数组的功能。

答案 2 :(得分:3)

你想要的是C99;但是,对于早期版本的C,您无法调用函数来动态分配内存,例如: alloca(3)malloc(3)

答案 3 :(得分:-3)

使用其中任何一个

GLubyte* vertsArray = (GLubyte*) malloc(sizeof(GLubyte) * bound);

GLubyte* vertsArray = new GLubyte[bound];

记得在不再需要对象时释放内存

delete [] vertsArray;

free((void*)vertsArray;

尽管他们在评论中说了什么,我仍然说如果你不是100%被迫使用C,你应该更喜欢 new 而不是 malloc 。见{{ 3}}