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 :

problème de structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Avril 2011
    Messages : 128
    Par défaut problème de structure
    je veux créer une structure de donnée qui contient 2 champs le premier c'est un caractère, le deuxième c'est un pointeur de même nature qui pointe sur la structure en cour d'initialisation, voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     struct element
    {
    char c;
    struct element *rep;
    };
     
    struct element creer_element(char a)
    {
    struct element el;
    el.c=a;
    el.rep=
    }
    mais lorsque je veux afficher rep il m'affiche rien, quel est le probléme?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Par défaut
    Salut,

    Tu veux afficher rep ? ou rep.c ?
    et il faudrait aussi que tu malloc el dans "creer_element"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    el = malloc(sizeof (element));
    parce que là, rep contient juste une adresse.

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Avril 2011
    Messages : 128
    Par défaut
    Citation Envoyé par nemesis57 Voir le message
    Salut,

    Tu veux afficher rep ? ou rep.c ?
    et il faudrait aussi que tu malloc el dans "creer_element"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    el = malloc(sizeof (element));
    parce que là, rep contient juste une adresse.
    lorsque je fai une allocation dynamique il m'affiche cet erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error C2440: 'initialisation'*: impossible de convertir de 'void *' en 'element'
    le problème c'est lorsque j'instancié 2 variables de ce type, ils seront créer mais le changement du champ c sera effectuer toujours sur le premier élément ! et pour le deuxième élément il m'affiche n'importe quoi!: voici la partie complète de ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct element creer_element(char a)
    {
    struct element el;
    el.c=a;
    el.rep=(struct element *) malloc(sizeof(struct element));
    el.rep=⪙
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Par défaut
    tu veux faire quoi exactement avec tes structures?
    un liste chainée ?

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Je n'ai pas compris ce que tu veux réellement faire.

    En tout cas, y a deux problèmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    el.rep=(struct element *) malloc(sizeof(struct element));
    el.rep=⪙
    Tu provoques une fuite de mémoire. En effet, tu donnes à "rep" la valeur retournée par malloc et puis tu l'écrases juste après...

    Deuxième problème, tu écrases cette valeur par l'adresse d'un objet local... qui va disparaitre lorsque tu vas quitter la fonction. A ne JAMAIS faire !

    Pour finir, il est totalement inutile de caster le retour de malloc. En C, les conversions void* et autre_type* et vice versa sont implicites. Caster permet de camoufler des problèmes, ce qui n'est pas recommandable :
    * compilation avec un compilateur C++ au lieu d'un compilateur C
    * oubli de l'inclusion de <stdlib.h>

    EDIT :
    oops... vilaine faute de frappe..

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Par défaut
    comment ça il est inutile de caser le retour de malloc ?
    dans le cas d'une liste chainée, s'il veut ajouter un element il faut bien qu'il aloue la memoire pour cet element
    et en principe il est pas obligé de le caster en void*

    je sais pas ... un exemple de fonction pour ajouter un element a une liste chainée
    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
     
    void            add_elem_end(char *name, char *value, t_li *l)
    {
      t_elem        *e;
     
      e = malloc(sizeof (t_elem));
      if (e == 0)
        exit(-1);
      e->next = 0;
      e->name = name;
      e->value = value;
      if (l->tail)
        l->tail->next = e;
      l->tail = e;
      l->size++;
      if (!l->head)
        l->head = e;
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Par défaut
    désolé jeroman ta faute de frappe (caster) a changé la façon dont j'ai interprété ta phrase --"
    je viens de remarquer ça, faut que j'aille dormir je crois ^^
    enfin bref, mayssaMM,
    comme le dit jeroman, il faudrait que tu expliques ce que tu veus faire avec ta structure, on pourrait beaucoup mieux t'aider

Discussions similaires

  1. Problème de structure "récursive"
    Par Pxnet dans le forum C
    Réponses: 5
    Dernier message: 21/01/2007, 17h20
  2. Problème de structures
    Par Zikas-r dans le forum C
    Réponses: 6
    Dernier message: 27/12/2006, 00h01
  3. Réponses: 16
    Dernier message: 21/08/2006, 14h12
  4. [Structures]Problème sur structures
    Par kendras dans le forum C++
    Réponses: 5
    Dernier message: 07/06/2006, 10h20
  5. [OCaml] Problème de structure/parser
    Par marv1 dans le forum Caml
    Réponses: 4
    Dernier message: 09/05/2005, 12h16

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