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 mémoire avec une liste chaînée


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Problème de mémoire avec une liste chaînée
    Bonjour à tous, j'ai un petit problème d'allocation mémoire mais je me demande vraiment d'où ça peut venir.

    Voici mes structures
    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
     
    typedef struct nodeId
    {
        int id;
        struct nodeId *next;
    } nodeId;
    typedef struct nodetag
    {
        char *word;
        struct nodetag *next;
     
    } nodetag;
     
    typedef struct node
    {
        char *word;
        int depth, type;  
     
        struct nodeId *nextId;
        struct nodetag *nexttag;
        struct node *child;  
        struct node *next;   
    } node;
     
    typedef nodeId *Idlist;
    typedef nodetag *taglist;
    typedef node *tree;
    J'ai créé un arbre b de manière manuel pour tester mes fonctions.
    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
     
        tree b = malloc(sizeof(tree));
     
        b->nextId = malloc(sizeof(nodeId));
        b->nextId->id = 3;
        b->nextId->next = malloc(sizeof(nodeId));
        b->nextId->next->id = 1;
        b->nextId->next->next = malloc(sizeof(nodeId));
        b->nextId->next->next->id = 8;
        b->nextId->next->next->next = malloc(sizeof(nodeId));
        b->nextId->next->next->next->id = 2;
        b->nextId->next->next->next->next = NULL;
        //J'ai effacer les autres initialisations pour que ce soit plus lisible
        //Avant d'envoyer mon arbre dans les fonction je teste si le 8 s'affiche bien
    printf("%d\n\n",b->nextId->next->next->id); //Il s'affiche correctement
     
        int size_new_tree = counterLSC(b->nextId); //Calcul la longueur de l'id
     
        int *new_tree = convertLSCtoTab(b->nextId, size_new_tree); //Mettre une LSC dans un tableau 1D
    La fonction qui ne va pas
    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
     
    int* convertLSCtoTab(Idlist a, int size)
    {
            printf("%d\n\n",a->next->next->id);//Affiche un nombre random
        int i;
        int *tab = NULL;
     
        tab = malloc(size*sizeof(int)); //J'ai même essayé en allouant un tableau beaucoup plus grand qu'il n'en faut mais ça ne fonctionne pas
     
        if (tab == NULL)
        {
            exit(0);
        }
     
        Idlist b = a;
     
        for (i=0; a != NULL; i++)
        {
            tab[i] = a->id;
            a = a->next;
        }
     
        int j;
        for(j=0;j<i;j++)
        {
            printf("%d ", tab[j]); //Sa affiche 3 1 "un nbr random" 2
    //Le 8 ne c'est pas affiché
        }
     
        a = b;
     
        return tab;
    }
    Merci pour votre aide.

    Cordialement,
    Airox

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 571
    Points : 7 684
    Points
    7 684
    Par défaut
    Bonjour,

    Si dès le début de la fonction la liste est incohérente, c'est qu'elle a été altérée avant. Il faudrait plutôt regarder le code exécuté entre les 2 points de contrôles.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Ok merci je viens de comprendre où était l'erreur c'était dans l'initialisation de mon tree que ça n'allait pas. Merci

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

Discussions similaires

  1. Problème avec une liste chaînée
    Par Frednight dans le forum Débuter
    Réponses: 6
    Dernier message: 16/04/2013, 16h28
  2. Réponses: 3
    Dernier message: 25/10/2007, 21h57
  3. problème d'accent avec une liste
    Par franfr57 dans le forum ASP
    Réponses: 2
    Dernier message: 08/05/2007, 16h00
  4. Problème de CSS avec une liste d'items
    Par Tuttu dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 18/02/2007, 20h57
  5. Réponses: 17
    Dernier message: 03/05/2006, 14h01

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