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 ex


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 12
    Par défaut allocation dynamique ex
    bonjour voici l'enoncé

    1)Lire 10 phrases au clavier et mémoriser les phrases en utilisant un tableau de pointeurs sur des chaînes de caractères:
    • Besoin déterministe connu dès le départ: un buffer de sasie de taille BUFSIZ
    • Besoin déterministe connu dès le départ: le nombre de phrases
    • Besoin non déterministe connu pendant l'exécution: la longueur des phrases (allocation
    dynamique)
    2) Libérer la mémoire allouée dynamiquement.

    et voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    void ex6()
    {
        int i;
        int n;
        char* tab;
     
        tab = (char*)malloc( 10 * sizeof(char) );
     
        for ( i=0; i<10; i++ )
        {
            printf("Phrase %d : ", i);
            scanf("%c", &tab[i]);
        }
     
        for (n=0;n<i;n++)
            printf("%c\n",tab[n]);
    }
    Lors de la demande de saisie, cela commence par "phrase 0 : ", si je rentre le caractère a,b,c,d (par exemple) il va directement passer a la demande de saisie de la phrase 2, sans passer par la 1. Je ne comprend pas trop.. Help ? merci. De plus comment libérer la mémoire alloué dynamiquement ?? avec Free ?

  2. #2
    Membre expérimenté
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Par défaut
    Remplace
    Par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%c%*c", &tab[i]);
    Cela devrait enlever le problème de caractères spéciaux lors de l'enregistrement.

  3. #3
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 871
    Par défaut
    Je recommande d'ailleurs plutôt l'utilisation de la fonction fgets pour ce genre d'opération.

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Je recommande aussi fortement l'utilisation de fgets() !

    Oui, à la fin de ton programme, avec free(), tu libères la mémoire allouée précédemment avec malloc().

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 831
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 831
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mrcode Voir le message
    1)Lire 10 phrases au clavier et mémoriser les phrases en utilisant un tableau de pointeurs sur des chaînes de caractères:
    • Besoin déterministe connu dès le départ: un buffer de sasie de taille BUFSIZ
    • Besoin déterministe connu dès le départ: le nombre de phrases
    • Besoin non déterministe connu pendant l'exécution: la longueur des phrases (allocation
    dynamique)
    2) Libérer la mémoire allouée dynamiquement.

    et voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        char* tab;
     
        tab = (char*)malloc( 10 * sizeof(char) );
        ...
        free(tab);
    Bonjour

    Déjà quand on écrit ce genre de syntaxe ; qui se simplifie en char tab[10] ; on peut se dire qu'il y a alors un problème. En effet, pourquoi faire du malloc quand rien ne le justifie ?

    A ce moment là on revient vers l'énoncé et on réfléchit. Et en effet, l'énoncé te parle de 10 phrases de longueurs variables; donc 10 tableaux de n caractères ; et non d'un tableau de 10 caractères. Donc là forcément tu te rends compte (ou du moins tu le devrais) que t'es mal parti. Surtout quand l'énoncé te parle de "tableau de pointeurs" et que tu crées, toi, un "tableau de caractères"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. probleme d'allocation dynamique
    Par vince3320 dans le forum C
    Réponses: 10
    Dernier message: 22/04/2004, 16h27
  2. petit pbm allocation dynamique de stringGrid
    Par AnneOlga dans le forum C++Builder
    Réponses: 10
    Dernier message: 17/01/2004, 11h59
  3. Allocation dynamique de structures
    Par fr_knoxville dans le forum C
    Réponses: 8
    Dernier message: 06/05/2003, 21h59
  4. Allocation dynamique de mémoire en asm
    Par narmataru dans le forum Assembleur
    Réponses: 7
    Dernier message: 17/12/2002, 22h31
  5. Réponses: 4
    Dernier message: 03/12/2002, 16h47

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