Bonjour a tous. J'apprends actuellement le C. Bien qu'ayant lu la F.A.Q, j'aurais voulu savoir a quel moment l'allocation dynamique d'une structure etait preferable a une declaration statique. Je vous remercie d'avance pour vos reponses.
Bonjour a tous. J'apprends actuellement le C. Bien qu'ayant lu la F.A.Q, j'aurais voulu savoir a quel moment l'allocation dynamique d'une structure etait preferable a une declaration statique. Je vous remercie d'avance pour vos reponses.
Disons que l'interet d'une allocation dynamique est d'economiser de l'espace memoire lorsque tu n'as pas réellement besoin de ta structure.
Si par exemple, tu as constamment besoin d'une structure, mieux faut l'instancier de manière statique. par contre, si par exemple, tu travailles sur des listes chainees, tu ne peux connaitre à l'avance le nombre de cellules que tu vas creer, il est donc plus interessant de les creer quand le besoin s'en fait sentir.
Donc pour conclure, si tu as peu de structure et que tu sais combien tu en necessites, instancie les en dur. Si tu as besoin de beaucoup de strucure mais pas toutes en meme temps ou encore, si tu ne sais pas de combien de strucure tu vas avoir besoin alors vas y a grand coup de mallo. Mais attention, le C n'est pas comme java, il n'y a pas de garbage collector, c'est a toi de faire le boulot proprement, c'est à dire de detruire les objets que tu as cree dynamiquement en memeoire (avec free). Si tu ne le fais pas, et si tes programmes doivent tourner un certain temps, il marcheront aussi bien que windows....
Donc n'oubie pas de nettoyer quand tu n'as plus besoin (meme avant de sortir)....
Bon courage. bye
Salut
Je pense pas quil sagisse de preference
C surtout une histoire ded besoin
Allocation statique : Tu es sur de cec ke tu ve
Allocation dynamique : Ton besoin varie
Un cas simple:
Par exemple un user veut rentrer ses notes:
Voila ca depend vraiment des besoin perso C pas une preference
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 int notes[5]; // La tu es sur ke le user na que 5 notes sinon si T pas sur: int nombre; int* tableau; scanf("%d",nombre); tableau=(int)malloc(sizeof(int0)*nombre);
Ok merci pour ces reponses. Les autres commentaires sont les bienvenus
Tout a fait d'accord avec kacceda ! L'utilisation dynamique t'es en fait impose par ton programme ! Quand tu vois que tu ne peux pas faire autrement, tu y passe. Quand tu ne peux pas fixer a la compilation la taille de tes tableaux. Rq: quand tu ne peux meme pas donner la taille de ton tableau dynamique car elle change au cours du prog, tu peux utiliser realloc !
Il est vrai qu'il reste le probleme des chaines de caracteres, et les entrees interactive. Mais c'est generalement soit :
- dimentionnable (tu fixes toi meme la taille des entrees (par exemples 1024/2048 voire plus (comme par exemple 32k pour la ligne de commande du shell)). Sinon, tu peux fixer la taille des lignes lues et tu lis ligne par ligne.
- passe en parametre de ton programme (et dans ce cas, c'est pas toi qui le gere )
Sinon, c'est dans quel cas que tu veux utiliser les tabeaux ?
Envoyé par kaceddaEt je pense que pour la question, c'est ca, si tu connais *tout* , tu peux faire une déclaration statique, sinon, un pointeur et tu alloues dynamiquement la mémoire au fur et à mesure de tes besoins ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int nombre; int* tableau; scanf("%d",&nombre); /* tavais oublier le & */ tableau=(int*)malloc(sizeof(int)*nombre);/* c'est (int*) avec asterique */
Je sais pas si c'est dans le sujet exactement, mais si tu veux passer la strucutre, il est preferable de passer un pointeur sur cette sutrucutre que la structure elle meme (sinon, t'auras une copie de la strucutre).
Nas'
si je comprend bien ,si je veux controler la durée de vie d'une structure, une allocation dynamique est l'unique solution ?
Merci a Nas pour la correction Bien vu
(je fai pas gaffe et jecris trop vite donc je me trompe)
Sinon pou fr_knoxville:
Oui je pense que lallocation dynamique est la seule solution
Mais ta une ID presicec de ce ke tu ve faire? Pourkoi tu ve controler sa duree de vie? par securite?
kacedda : En fait je veux juste connaitre exactement les differentes possibilités qu'offre l'allocation dynamique et quand utiliser cette possibilité. En tout cas merci pour les reponses.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager