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 :

Probleme structure / realloc


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 41
    Par défaut Probleme structure / realloc
    Bonjour,

    j ai un petit soucis avec un code c. Le but est en autre d avoir un tableau dynamique liste de type igmp_client et dont le nombre d element est current_host. 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
    typedef struct _igmp_client
    {
    	uchar ip_address[4];
    	int interface;
    } igmp_client;
     
    typedef struct _igmp_entry
    {
    	uchar groupAddr[4];
    	int current_host;
    	struct _igmp_client * liste;
     
    } igmp_entry;
    et dans une fonction, j appelle le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (igmp_tbl[id].current_host == 0)
               igmp_tbl[id].liste = NULL;
    igmp_tbl[id].liste = (igmp_client*) realloc (igmp_tbl[id].liste, (igmp_tbl[id].current_host+1) * sizeof (igmp_client));
    et voila l erreur que j obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    igmp.c:150: error: incompatible types in assignment
    igmp.c:152: error: invalid lvalue in assignment
    Si quelqu un pouvait m apporter un petit eclaircisement, ca serait sympa, ca fait tellement longtemps que je n ai pas touche a du C.

    Merci bcp.

    @++

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par bobgeldof7
    et voila l erreur que j obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    igmp.c:150: error: incompatible types in assignment
    igmp.c:152: error: invalid lvalue in assignment
    Je n'ai pas de problèmes de compilation avec ce code. L'erreur est ailleurs.
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef unsigned char uchar;
     
    typedef struct _igmp_client
    {
       uchar ip_address[4];
       int interface;
    }
    igmp_client;
     
    typedef struct _igmp_entry
    {
       uchar groupAddr[4];
       int current_host;
       struct _igmp_client *liste;
     
    }
    igmp_entry;
     
     
    int main (void)
    {
       igmp_entry igmp_tbl[1];
       int id = 0;
     
       if (igmp_tbl[id].current_host == 0)
          igmp_tbl[id].liste = NULL;
       igmp_tbl[id].liste =
          (igmp_client *) realloc (igmp_tbl[id].liste,
                                   (igmp_tbl[id].current_host +
                                    1) * sizeof (igmp_client));
     
       return 0;
    }
    Evidemment, l'usage de realloc() est à revoir, mais c'est un autre problème

    http://emmanuel-delahaye.developpez....tes.htm#malloc
    http://emmanuel-delahaye.developpez....es.htm#realloc

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Salut,

    Moi non plus je ne vois aucune erreur dans le code que tu as posté.

    Citation Envoyé par bobgeldof7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef struct _igmp_client
    {
    	uchar ip_address[4];
    	int interface;
    } igmp_client;
     
    typedef struct _igmp_entry
    {
    	uchar groupAddr[4];
    	int current_host;
    	struct _igmp_client * liste;
     
    } igmp_entry;
    et dans une fonction, j appelle le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (igmp_tbl[id].current_host == 0)
               igmp_tbl[id].liste = NULL;
    igmp_tbl[id].liste = (igmp_client*) realloc (igmp_tbl[id].liste, (igmp_tbl[id].current_host+1) * sizeof (igmp_client)); /* J'utiliserais malloc ici et le cast est déconseillé */
    J'ai toutefois une petite remarque sur l'utilsation de realloc. Si igmp_tbl n'est pas NULL mais pointe sur un espace alloué par malloc, et que ton appel à realloc échoue: realloc retournera NULL et l'espace pointé par igmp_tbl ne sera pas libéré (memory leak). Pour une bonne utilisation de malloc, calloc et realloc, voir la doc:
    http://man.developpez.com/man3/realloc.3.php
    et cet excellent tutoriel:
    http://rperrot.developpez.com/articles/c/allocationC/

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 41
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Evidemment, l'usage de realloc() est à revoir, mais c'est un autre problème
    Qu'est ce que tu veux dire ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 41
    Par défaut
    Oups, nos messages se sont croises.

    je vais rejeter un coup d oeil a tout ca alors.

    Merci de vos reponses.

Discussions similaires

  1. Probleme structure et liste
    Par xillion dans le forum C
    Réponses: 6
    Dernier message: 26/03/2008, 20h45
  2. probleme structure case
    Par monsieur77 dans le forum Linux
    Réponses: 4
    Dernier message: 07/11/2007, 12h14
  3. Probleme de realloc sur un tableau 2d.
    Par gnouz dans le forum C
    Réponses: 9
    Dernier message: 08/06/2007, 13h35
  4. probleme structure en parametre
    Par ciberju dans le forum C
    Réponses: 2
    Dernier message: 21/08/2006, 03h26
  5. Réponses: 3
    Dernier message: 02/03/2006, 11h25

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