Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3267 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Allocation correcte en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Allocation correcte en C

n°1238492
guguy
Posté le 04-11-2005 à 11:17:30  profilanswer
 

Salut,
 
Dans mon cours d'algo/c la prof fait des allocations pour les tableaux qui me semble
tout a fait incorrecte et même franchement crado, de type :
 
int n, T[n];
printf("Taille du tableau?" );
scanf("%d", &n);
 
Moi j'ai répliqué qu'il fallait faire un jolie malloc mais selon elle son truc est bon...
 
Alors, est-ce qu'on a le droit de faire ca?

mood
Publicité
Posté le 04-11-2005 à 11:17:30  profilanswer
 

n°1238498
Elmoricq
Modérateur
Posté le 04-11-2005 à 11:23:25  profilanswer
 

Les VLA (Variable-Length Array) existent depuis la norme C99, maintenant je ne connais pas encore de compilateur qui le gère de manière fiable.
Je crois que gcc l'implémente partiellement.
 
Donc vaut mieux faire un malloc(), en effet.
Et puis au passage, scanf() utilisé comme ça est une belle source de plantages.


Message édité par Elmoricq le 04-11-2005 à 11:24:09
n°1238517
Taz
bisounours-codeur
Posté le 04-11-2005 à 11:35:53  profilanswer
 

bien répondu. Demande lui ce qu'il se passe si la valeur de n n'est pas initialisé (échec de scanf) ou bien a une mauvaise valeur (négative, 0, ou énorme) ... ben il se passe pour ainsi dire rien : tu n'a aucun moyen de savoir si l'allocation de ton tableau a réussie ou échouée. Plantage en vue ...
 
Les VLA c'est surtout pas fait pour ce genre d'usage. C'est une petite douceur quand on a la certitude que n est borné dans des valeurs acceptables et que ça va pas péter la pile. Mais surtout pas pour une entrée utilisateur.

n°1238529
Elmoricq
Modérateur
Posté le 04-11-2005 à 11:41:41  profilanswer
 

Taz a écrit :

Demande lui ce qu'il se passe si la valeur de n n'est pas initialisé (échec de scanf) ou bien a une mauvaise valeur (négative, 0, ou énorme) ... ben il se passe pour ainsi dire rien : tu n'a aucun moyen de savoir si l'allocation de ton tableau a réussie ou échouée. Plantage en vue ...


 
De fait, je n'avais même pas envisagé cet aspect. La norme dit quoi si n n'est pas défini, c'est géré ou le comportement est indéfini ?
 
Faut que j'aille jeter un oeil.

n°1238568
Elmoricq
Modérateur
Posté le 04-11-2005 à 12:13:20  profilanswer
 

Bon, j'ai fouiné dans tout ce que j'ai pu trouver concernant les VLA.
 
Ca donne deux points :

  • même si le compilateur supporte les VLA, ta prof a méchament tort : l'allocation d'un VLA se fait lors de sa définition, ensuite tu auras beau changer n, la taille de ton VLA ne variera pas.  Ce qui signifie que dans l'exemple que tu as posté, ton VLA est de taille indéfini, puisque n vaut potentiellement n'importe quoi.


  • Quant à la validité de n lors de la définition de ton VLA, si n n'est pas dans l'intervalle correct, le comportement est indéfini. Autrement dit, soit le compilateur est sympa et te mets un tableau vide, soit le programme plante, soit le compilateur a envie de mettre une taille de 42... bref, on ne peut pas savoir. Vaut mieux s'assurer que tout est ok avant de définir un VLA.


 
Voilà voilà...

Message cité 1 fois
Message édité par Elmoricq le 04-11-2005 à 12:14:12
n°1239368
el muchach​o
Comfortably Numb
Posté le 05-11-2005 à 16:35:45  profilanswer
 
n°1239379
Joel F
Real men use unique_ptr
Posté le 05-11-2005 à 17:06:38  profilanswer
 

coup de pelle dans le cul je vous dit :o

n°1240324
Sve@r
Posté le 07-11-2005 à 13:23:12  profilanswer
 

Elmoricq a écrit :

Bon, j'ai fouiné dans tout ce que j'ai pu trouver concernant les VLA.
 
Ca donne deux points :

  • même si le compilateur supporte les VLA, ta prof a méchament tort : l'allocation d'un VLA se fait lors de sa définition, ensuite tu auras beau changer n, la taille de ton VLA ne variera pas.  Ce qui signifie que dans l'exemple que tu as posté, ton VLA est de taille indéfini, puisque n vaut potentiellement n'importe quoi.


  • Quant à la validité de n lors de la définition de ton VLA, si n n'est pas dans l'intervalle correct, le comportement est indéfini. Autrement dit, soit le compilateur est sympa et te mets un tableau vide, soit le programme plante, soit le compilateur a envie de mettre une taille de 42... bref, on ne peut pas savoir. Vaut mieux s'assurer que tout est ok avant de définir un VLA.


 
Voilà voilà...


 
Hum... j'ai connu une école à Rennes où la prof (prof d'algo) avait TOUJOURS raison. Et si l'élève lui prouvait qu'elle avait tord (ce qui était relativement fréquent), ben l'élève n'avait plus jamais de note dépassant 6.
J'espère pour guguy que ce n'est pas la même prof...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1240334
Elmoricq
Modérateur
Posté le 07-11-2005 à 13:31:26  profilanswer
 

:/
 
Une catégorie de gens que je méprise tout particulièrement.

n°1240615
Taz
bisounours-codeur
Posté le 07-11-2005 à 17:22:32  profilanswer
 

l'université :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Allocation correcte en C

 

Sujets relatifs
[C][linux] msgget : problème d'allocation[Résolu] Ecriture correcte de requête
Structure base de données MySQL : correcte ou pas ?Syntaxe correcte pour programmation basique?
allocation dynamiquequestion : syntaxe correcte ? signification ?
probleme allocation memoireProhiber l'allocation/destruction d'objet
[Class] Constructeur et allocation de mémoire.Allocation pour FPU
Plus de sujets relatifs à : Allocation correcte en C


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)