IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Allocation dynamique de structures


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Allocation dynamique de structures
    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.

  2. #2
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 39
    Points : 46
    Points
    46
    Par défaut
    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

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    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:
    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);
    Voila ca depend vraiment des besoin perso C pas une preference

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Ok merci pour ces reponses. Les autres commentaires sont les bienvenus

  5. #5
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    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 ?

  6. #6
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Citation Envoyé par kacedda
    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);
    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 */
    Et 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 ...
    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'

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    si je comprend bien ,si je veux controler la durée de vie d'une structure, une allocation dynamique est l'unique solution ?

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    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?

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/05/2014, 20h25
  2. Réponses: 7
    Dernier message: 02/09/2009, 22h39
  3. Réponses: 67
    Dernier message: 13/02/2007, 18h08
  4. Allocation dynamique de structure
    Par malves dans le forum C
    Réponses: 5
    Dernier message: 02/11/2006, 12h07
  5. Allocation dynamique tableau dans structure
    Par chental dans le forum C
    Réponses: 2
    Dernier message: 03/08/2006, 09h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo