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 :

C | Structures | Allocation dynamique | Pointeurs


Sujet :

C

  1. #1
    Membre confirmé
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Par défaut C | Structures | Allocation dynamique | Pointeurs
    Bonjour, j'ai probablement fait une erreur grossière mais je vois pas où :-)

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct PARCELLES
    {
        int z;
        float f;
        char c;
    }parcelles;
     
    int main()
    {
        int i, nombre_de_parcelles = 0;
        printf("Combien de parcelles ?");
        scanf("%d",nombre_de_parcelles);
     
        parcelles *p = NULL;
        p=(parcelles *) malloc (sizeof(parcelles));
     
        if(p == NULL)
    		exit(1);//si l`alloc a echoue, on quitte le programme.
     
        for(i=0; i<nombre_de_parcelles;i++)
        {
    		printf("Quel valeur pour p ? ");
            scanf("%d",(*p[i]).z);
            printf("Quel valeur pour f ? ");
            scanf("%d",(*p[i]).f);
            printf("Quel chaine de caractère pour c ? ");
            scanf("%c",(*p[i]).c);
        }
     
        for(i=0;i<nombre_de_parcelles;i++) //afficher la liste des parcelles.
    	{
    		printf("[%d] \n",p[i].z);
    		printf("[%d] \n",p[i].f);
            printf("[%d] \n",p[i].c);
    	}
     
        free(p);
        return 0;
    }

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Ligne 18 tu alloues une parcelle et non nombre_de_parcelles. Il te faut multiplier sizeof(parcelles) par ce nombre.

    Une petite remarque. Si tu es en C tu n’es pas obligé de caster le malloc ().

  3. #3
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 754
    Par défaut
    Hello,

    Et tous les scanf() sont en erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     In function 'main':
    15:13: warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat=]
         scanf("%d",nombre_de_parcelles);
                 ^
    26:21: error: invalid type argument of unary '*' (have 'parcelles {aka struct PARCELLES}')
             scanf("%d",(*p[i]).z);
                         ^~~~~
    28:21: error: invalid type argument of unary '*' (have 'parcelles {aka struct PARCELLES}')
             scanf("%d",(*p[i]).f);
                         ^~~~~
    30:21: error: invalid type argument of unary '*' (have 'parcelles {aka struct PARCELLES}')
             scanf("%c",(*p[i]).c);
                         ^~~~~

Discussions similaires

  1. Réponses: 11
    Dernier message: 01/08/2010, 14h34
  2. Allocation dynamique (pointeur passé en paramètre)
    Par sperca dans le forum Débuter
    Réponses: 6
    Dernier message: 03/02/2009, 14h50
  3. Réponses: 67
    Dernier message: 13/02/2007, 18h08
  4. allocation dynamique et tableaux de pointeurs
    Par gbardy dans le forum 4D
    Réponses: 3
    Dernier message: 06/07/2006, 11h08
  5. Allocation dynamique de structures
    Par fr_knoxville dans le forum C
    Réponses: 8
    Dernier message: 06/05/2003, 21h59

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