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 imbriquées


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut Allocation dynamique de structures imbriquées
    Je suis nouveau en programmation et nouveau sur ce super site

    je code un petit programme en C assez simple mais qui pose un problème si j'alloue dynamiquement de la mémoire :
    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
    typedef struct
    {
    	int numero;
    	char * Ref_Produit;
    	char * Designation;
    	double Quantite;
    	double PU_HT;
    	double Taux_TVA;
    	double Montant_TVA;
    	double Total_TTC;
     
    } LigneCommande ;
     
    typedef struct
    {
    	int NombreDeLignesParFacture ;
    	char * Date_Facturation;
    	char * Ref_Facture ;
    	char * Idex_Bon_Commande ;
    	LigneFacture * Ligne ;                         /*   Pointeur sur  la structure LigneCommande  */
    	double Montant_Total_Facture_HT;
    	double Montant_Remise_Facture;
    	double Montant_Total_TVA;
    	double Montant_Total_TTC;
     
    } Facture;
    quand j' essaye d'alloué dynamiquement de la mémoire pour la structure Facture et son champ Ligne qui est un pointeur sur la structure LigneCommande j'obtient une erreur lors de compilation

    voici le 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
    Facture * tabFacture ;
     
    printf("Nombre de facture ?: ");
    scanf("%d",&nombreDeFacture);
    getchar();  
     
    tabFacture = (Facture *) realloc( tabFacture  , (nombreDeFacture + 1 ) * sizeof(Facture));
     
    printf("Nombre de lignes par la facture ");
    scanf("%d",&nombreDeLignesParFacture);
    getchar();
     
     
    for( i = 0 ; i < nombreDeFacture ; i++ )		
         facture[i]->Ligne = (LigneFacture*)  malloc(nombreDeLignesParFacture * sizeof(LigneFacture));
    Pouvais vous m'aider ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Quel message d'erreur obtiens-tu ?
    N'aurais-tu pas changé certains noms de variables en recopiant ton code sur le forum ?
    Je pense notamment à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LigneFacture * Ligne ;                         /*   Pointeur sur  la structure LigneCommande  */
    et facture/tabFacture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Facture * tabFacture ;
    // ...
    for( i = 0 ; i < nombreDeFacture ; i++ )		
         facture[i]->Ligne = (LigneFacture*)  malloc(nombreDeLignesParFacture * sizeof(LigneFacture));
    Si tel est le cas, c'est plutôt un . à la place de -> : facture[i].Ligne

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut
    Oui, effectivement j'ai du modifier le nom de la structure

    pour l'erreur du compilateur c'est : Conversion de pointeur non portable ( qui n'est pas très explicatif ; je pense que c'est simplement dû au problème d'allocation de la mémoire )

    enfaite je déclare un pointeur sur la structure Facture

    et je transmet son adresse à la fonction : SaisirFacture(&tabFacture,nombreDeFacture) dont le prototype est SaisirFacture(Facture **,int ).

    je tente d'allouer la mémoire avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *facture[i]->Ligne = (LigneCommande *)  malloc(nombreDeProduitsParFacture * sizeof(LigneCommande));
    et l'erreur est à ce niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *facture[i]->Ligne[j].Ref_Produit = Clavier();
    cad lors de l'affectation dans la boucle .

    voilà et merci..

  4. #4
    Invité
    Invité(e)
    Par défaut
    Qu'est-ce que facture dans le for alors ? De quel type est cette variable ?
    Est-ce le paramètre de ta fonction SaisirFacture() ? (Paramètre qui pourrait très bien être un simple pointeur et non double : (*facture) se résumerait alors à facture.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SaisirFacture(Facture ** facture , int nombreDeFacture) {
        // ...
        for( i = 0 ; i < nombreDeFacture ; i++ )		
            (*facture)[i].Ligne = /*(LigneFacture*) cast inutile en C */  malloc(nombreDeLignesParFacture * sizeof(LigneFacture));
    }

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut
    Merci Winjerome le problème est réglé maintenant .

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/09/2009, 22h39
  2. Réponses: 67
    Dernier message: 13/02/2007, 18h08
  3. Allocation dynamique de structure
    Par malves dans le forum C
    Réponses: 5
    Dernier message: 02/11/2006, 12h07
  4. Allocation dynamique tableau dans structure
    Par chental dans le forum C
    Réponses: 2
    Dernier message: 03/08/2006, 09h03
  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