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 à la fermeture d'une fonction, Liste chainée


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut probleme à la fermeture d'une fonction, Liste chainée
    Bonjour,
    j'ai un problème de destruction de cellule d'une liste chainée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct cell_s{
      int i;
      char* c;
      struct cell_s *next;
    }cell;
    typedef cell *List;
    je crée dans mon main un tabelau de listes : List *L= New List[4], puis je veux qu'elle soit modifié par une fonction f qui rajoute une cellule à la liste et dans cette fonction j'utilise d'autres fonction qui utilise cette liste.
    voila en gros l'architechture du programme :
    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
     
    int f2(...,List L){
    ...
    //L n'est pas modifiée L est correcte
    return entier;
    }
     
    void f(List &L){
    ...
    //ajout d'une cellule dans la liste L
    ...
    // pas de problèmes , L est correcte
    int val = f2(...,L);
    //problème L n'est pas bonne.
    ...
    }
     
    int main(){
    List L;
    ...
    for (int j=0; j<10;i++)
    {
      for (int i=0; i<4;i++)
        {
           f(L[i]);
        }
    }
    return 1;
    }
    Les allocations mémoires sont bonnes, le problème est que lorsque je quitte la fonction f2 la valeur de L->i devient 0 alors que L->c reste correcte (alors qu'avant et dans la fonction f2, elles sont ttes les deux correctes).
    de plus lorsque je sort de la fonction f, la première cellule de la liste L[i] qui a buggé prend les valeurs de L[i+1] pour i et c mais par contre conserve le pointeur vers la cellule suivante correctement...
    bref je comprend pas trop ce qu'il se passe, est ce que le fait d'utiliser des &L et L ne provoque pas une destruction de cellule lorsque la fonction f2 se termine car juste avant le return tt est bon et apres la fonction f2 ca a bugger...

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    le problème est vraiment chelou , j'ai essayé plein de truc donc faire une nouvelle liste List P=L;
    et appliqué f2 à P plustot ke L : int val = f2(...,P);
    le problème c'est que L est modifié juste après que f2(...,P); soit terminée...
    jpige rien du tt la,
    aidez moi svp..

Discussions similaires

  1. [AC-2007] Probleme de fermeture d'une zone de liste active
    Par mkader dans le forum IHM
    Réponses: 2
    Dernier message: 15/11/2012, 08h04
  2. Réponses: 2
    Dernier message: 29/07/2009, 18h04
  3. Grand Probleme d'appele d'une fonction
    Par Soufyane dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/02/2006, 15h57
  4. Probleme de pointeur sur une fonction
    Par nicky78 dans le forum C
    Réponses: 2
    Dernier message: 23/05/2004, 20h26
  5. [BPW]Problème de recherche dans une boîte liste
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 14
    Dernier message: 05/07/2003, 15h10

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