c tableaux: réglage de la taille dynamicment?

Je suis nouveau dans la programmation en C. J’essaie de définir la taille du tableau à l’aide d’une variable, mais j’obtiens une erreur: la taille de stockage de ‘tableau’ n’est pas constante !!

01 int bound = bound*4; 02 static GLubyte vertsArray[bound]; 

J’ai remarqué que lorsque je remplace les limites (entre parenthèses à la ligne 02) par le nombre «20», le programme se déroulerait sans problème. Mais j’essaie de définir la taille du tableau de manière dynamic …

Des idées pourquoi je reçois cette erreur? Merci beaucoup,

Vous obtenez cette erreur car, comme le compilateur vous l’a dit, la taille de votre tableau n’est pas constante. Dans la version C89 / 90 du langage C, la taille du tableau doit être constante. Vous ne pouvez pas “définir la taille du tableau de manière dynamic”. Si vous avez besoin d’un tableau de la taille d’une exécution, vous devez soit l’allouer manuellement avec malloc soit utiliser une approche non standard spécifique au compilateur (telle que la fonction alloca ).

Dans la version C99 du langage C, la prise en charge des tableaux de longueur variable (VLA) a été ajoutée. Un compilateur C99 accepterait la déclaration de tableau au moment de l’exécution pour un tableau automatique . Cependant, même en C99, vous ne pouvez pas déclarer un tableau statique de taille au moment de l’exécution, comme vous essayez de le faire.

Pour créer un tableau de taille non constante (c’est-à-dire connu au moment de la compilation), vous devez lui allouer de l’espace de manière dynamic à l’aide de malloc() (et le désallouer en conséquence à l’aide de free() lorsqu’il n’est plus nécessaire).

Comme d’autres l’ont noté, la possibilité de déclarer des tableaux dynamics est disponible dans les compilateurs compatibles C99.

Ce que vous voulez est possible dans C99; Cependant, avec les versions précédentes de C, vous êtes bloqué dans l’appel de fonctions pour allouer de la mémoire de manière dynamic, par exemple alloca(3) ou malloc(3) .

utiliser l’un de ces

 GLubyte* vertsArray = (GLubyte*) malloc(sizeof(GLubyte) * bound); GLubyte* vertsArray = new GLubyte[bound]; 

n’oubliez pas de libérer la mémoire lorsque vous n’avez plus besoin de l’object

 delete [] vertsArray; free((void*)vertsArray; 

Malgré ce qu’ils disent dans les commentaires, je dis toujours que vous devriez préférer nouveau à malloc si vous n’êtes pas obligé à 100% d’utiliser C. Consultez ce lien pour plus d’informations