c数组:动态设置大小?
我是C编程的新手。 我试图使用变量设置数组的大小,但我收到一个错误: ‘数组’的存储大小不是恒定的 !
01 int bound = bound*4; 02 static GLubyte vertsArray[bound];
我注意到当我用数字’20’替换边界 (在第02行的括号内)时,程序将运行没有问题。 但我试图动态设置数组的大小…
任何想法为什么我收到此错误? 非常感谢,
您收到此错误的原因是,正如编译器告诉您的那样,您的数组大小不是常量。 在C89 / 90版本的C语言中,数组大小必须是常量。 您不能“动态设置数组的大小”。 如果需要运行时大小的数组,则必须使用malloc
手动分配它或使用某些非标准的特定于编译器的方法(如alloca
函数)。
在C99版本的C语言中增加了对所谓的可变长度数组(VLA)的支持。 C99编译器将接受自动数组的运行时大小的数组声明。 然而,即使在C99中,您也无法声明运行时大小的静态数组,正如您所尝试的那样。
要创建一个非常量大小的数组(即在编译时已知),您需要使用malloc()
为它动态分配空间(并在不再需要时使用free()
相应地释放它)。
正如其他人所指出的那样,在符合C99的编译器中可以使用声明动态数组的function。
你想要的是C99; 但是,对于早期版本的C,您无法调用函数来动态分配内存,例如alloca(3)
或malloc(3)
。
使用其中任何一个
GLubyte* vertsArray = (GLubyte*) malloc(sizeof(GLubyte) * bound); GLubyte* vertsArray = new GLubyte[bound];
记得在不再需要物体时释放内存
delete [] vertsArray; free((void*)vertsArray;
尽管他们在评论中说了什么,但我仍然说如果你不是100%被迫使用C,你应该更喜欢new而不是malloc 。请参阅此链接以获取更多信息