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

Linux Discussion :

Problème liste chainée à partir d'un fichier .txt


Sujet :

Linux

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Problème liste chainée à partir d'un fichier .txt
    Le but est de lire le fichier ligne par ligne et de les insérer dans une liste.

    Le code de la structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct element
      {
        char *val; //lettre alphabet ou chiffre
        char *morse; //équivalent morse
        struct element *suiv;
      } ;
      typedef struct element ELEMENT;
      typedef struct element * Listes;

    fonction


    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
    Listes creerListe()
      {
        char ligne[20]; //tableau tampon ligne
        char * Caract;
        char * Morse;
        char * l;
        FILE * fichier;
        Listes q, p=NULL;
     
        fichier = fopen("liste_conversion.txt","r"); //ouverture du fichier en lecture 
     
        }
        while (l!= NULL)
        {
    	l=fgets(ligne,20,fichier);
    	Caract = strtok (ligne, "=");
    	Morse = strtok(NULL,"=");
    	q=(Listes) malloc(sizeof(ELEMENT));
    	q->val=Caract; 
    	q->morse=Morse;
    	q->suiv=p;
    	p=q;
    	return p;	
     
        }
     
        printf("%s%s\n",p->val, p->morse);
     
      }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void afficher(Listes L)
      {
        Listes p= L;
        while (p!=NULL)
        {
           printf("%s%s\n",p->val,p->morse);
           p=p->suiv;	 
        }
      }
    Je n'arrive pas à savoir si la liste s'est créer puisque la fonction afficher ne fonctionne pas et je ne vois pas d'ou viens le problème.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 302
    Points : 4 965
    Points
    4 965
    Billets dans le blog
    5
    Par défaut
    Sans trop chercher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Caract = strtok (ligne, "=");
    	Morse = strtok(NULL,"=");
    Il n'y a aucune allocation mémoire avec strtok();. Comme ligne est alloué dans la pile (en locale) lors de la sortie de creerliste(); tout ceci pointe sur n'importe quoi!


    Deuxième point. La valeur de q->suivant.

    A chaque entrée dans creerliste(); tu affecte NULL à p. Donc tous les éléments ont pour valeur NULL pour ce qui est de l'élément suivant. Enfin il me semble...

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Sans trop chercher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Caract = strtok (ligne, "=");
    	Morse = strtok(NULL,"=");
    Il n'y a aucune allocation mémoire avec strtok();. Comme ligne est alloué dans la pile (en locale) lors de la sortie de creerliste(); tout ceci pointe sur n'importe quoi!


    Deuxième point. La valeur de q->suivant.

    A chaque entrée dans creerliste(); tu affecte NULL à p. Donc tous les éléments ont pour valeur NULL pour ce qui est de l'élément suivant. Enfin il me semble...
    Merci de ta réponse, pour le premier point, comment je peux faire pour allouer la mémoire à mes 2 variables?

    Pour le deuxième point, je dois enlever p=NULL au début de créerListe? commencer récupérer la valeur finale de la liste? J'ai essayer return p dans la boucle et en dehors et il m'affiche toujours des caractères spéciaux:

    ����..
    ��..

    ����..
    ��..

    ����..
    ��..

    ����..
    ��..

    J'ai essayer une allocation du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while ((fgets(ligne,20,fichier) != NULL))
    {
    	Caract = malloc(sizeof(strtok(ligne,"=")));
    	Morse = malloc(sizeof(strtok(NULL,"=")));
    	q=(Listes) malloc(sizeof(ELEMENT));
    	q->val=Caract;
    	q->morse=Morse;
    	q->suiv=p;
            p=q; 
    }  return p;
    Mais je n'ai plus aucun affichage.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 302
    Points : 4 965
    Points
    4 965
    Billets dans le blog
    5
    Par défaut
    Une liste chaînée se compose comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    element -> data
            -> suivant
    A chaque insertion d'un élément il faut avoir à sa disposition le pointeur du dernier élément inséré. Soit tu le conserves dans une variable, soit tu scrutes toute la liste pour atteindre le dernier élément (pas très performant).

    Une fois le pointeur du dernier élément acquis tu initialises un nouvel élément. Tu affectes le pointeur de ce dernier au pointeur "suivant" du dernier élément de la liste actuelle. Ainsi la liste contient un nouvel élément. L'affectation de data est à ta discrétion.

    Ceci étant dit voila comment je vois l'affaire:
    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
     
    Listes add_element(Listes liste, char *Caract, char *Morse)
    {
      Listes NewElement = (Listes)malloc(sizeof(ELEMENT));
      NewElement->suivant = null;  // Le dernier élément pointe sur rien.
     
      Listes TmpList = liste;
     
      /* Contrôle si la liste contient au moins un élément. Si ce
       * n'est pas le cas on ne fait qu'affecter le nouvel élément.
       */
      if (liste==null) liste = NewElement;
      else
      {
        // Recherche du dernier élément de la liste actuelle
        while (TmpList->suivant!=null) TmpList=TmpList->suivant;
     
        // Affectation du nouvel élément à la liste actuelle
        TmpList->suivant = NewElement;
      }
     
      // Affectation des valeurs à Caract et Morse.
      NewElement->Caract = Caract;
      NewElement->Morse = Morse;
     
      return liste;
    }
    En sortie de cette fonction tu récupères le pointeur sur le premier élément de la liste. Si la liste n'existe pas tu transmets la valeur "null" à la fonction est en sortie tu as une nouvelle liste fraîchement créée avec un élément.

    Pour Caract et Morse si tu connais leur longueur maxi tu peux les déclarer comme tableau. Ca t'évitera une allocation dynamique.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Une liste chaînée se compose comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    element -> data
            -> suivant
    A chaque insertion d'un élément il faut avoir à sa disposition le pointeur du dernier élément inséré. Soit tu le conserves dans une variable, soit tu scrutes toute la liste pour atteindre le dernier élément (pas très performant).

    Une fois le pointeur du dernier élément acquis tu initialises un nouvel élément. Tu affectes le pointeur de ce dernier au pointeur "suivant" du dernier élément de la liste actuelle. Ainsi la liste contient un nouvel élément. L'affectation de data est à ta discrétion.

    Ceci étant dit voila comment je vois l'affaire:
    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
     
    Listes add_element(Listes liste, char *Caract, char *Morse)
    {
      Listes NewElement = (Listes)malloc(sizeof(ELEMENT));
      NewElement->suivant = null;  // Le dernier élément pointe sur rien.
     
      Listes TmpList = liste;
     
      /* Contrôle si la liste contient au moins un élément. Si ce
       * n'est pas le cas on ne fait qu'affecter le nouvel élément.
       */
      if (liste==null) liste = NewElement;
      else
      {
        // Recherche du dernier élément de la liste actuelle
        while (TmpList->suivant!=null) TmpList=TmpList->suivant;
     
        // Affectation du nouvel élément à la liste actuelle
        TmpList->suivant = NewElement;
      }
     
      // Affectation des valeurs à Caract et Morse.
      NewElement->Caract = Caract;
      NewElement->Morse = Morse;
     
      return liste;
    }
    En sortie de cette fonction tu récupères le pointeur sur le premier élément de la liste. Si la liste n'existe pas tu transmets la valeur "null" à la fonction est en sortie tu as une nouvelle liste fraîchement créée avec un élément.

    Pour Caract et Morse si tu connais leur longueur maxi tu peux les déclarer comme tableau. Ca t'évitera une allocation dynamique.

    J'ai essayé de les définir comme des tableaux comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     struct element
      {
        char *val[1]; //lettre alphabet ou chiffre
        char *morse[1]; //équivalent morse
        struct element *suivant;
      } ;
      typedef struct element ELEMENT;
      typedef struct element * Listes;
    et dans ma fonction creerListe:

    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
    Listes creerListe()
      {
        char ligne[20]; //tableau tampon ligne
        char *Caract;
        char *Morse;
        char * l;
        FILE * fichier;
        Listes q, p=NULL;
     
        fichier = fopen("liste_conversion.txt","r"); //ouverture du fichier en lecture avec la fonction fopen()
        if (fichier != NULL) //on teste si le fichier existe
        {
          printf("Ouverture du fichier de conversion ok\n"); //affiche «ouverture ok» si l’ouverture s’est bien passée
        }else //sinon
        {
         printf("Ouverture impossible"); //on affiche ouverture impossible
         exit; //on force la sortie de la boucle
        }
     
     
        while (fgets(ligne,20,fichier) != NULL)
        {
    	Listes liste;
    	Caract = strtok(ligne,"="); 
    	Morse = strtok(NULL,"=");
    	q=(Listes) malloc(sizeof(ELEMENT));
    	q->val[0]=Caract;
    	q->morse[0]=Morse;
    	q->suivant=p;
    	p=q; 
         }  return p; 
      }
    Mais du coup je ne sais pas quoi mettre dans le printf comme % en sachant qu'il me dit que c'est de type char**.

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 302
    Points : 4 965
    Points
    4 965
    Billets dans le blog
    5
    Par défaut
    Pourrais-tu me montrer un fichier texte exemple pour voir le format?

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Pourrais-tu me montrer un fichier texte exemple pour voir le format?
    Oui tiens il est comme ceci:


    A=.−
    B=−...
    C=−. − .
    D=−..
    E=.
    F=.. − .
    G=− − .
    H=....
    I=..
    J=. − −−
    K=−.−
    L=. − ..
    M=−−
    N=−.
    O=− − −
    P=. − −.
    Q=− − .−
    R=. − .
    S=...
    T=−
    U=..−
    V=...−
    W=. − −
    X=−..−
    Y=−. − −
    Z=--..

  8. #8
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 302
    Points : 4 965
    Points
    4 965
    Billets dans le blog
    5
    Par défaut
    Pour conserver des données dans une liste chaînée il est nécessaire d'avoir une allocation dynamique.
    En reprenant le code exemple que je t'ai donné j'ai écrit un programme exemple qui alloue chaque élément de la liste dans le tas ainsi que les données "val" et "morse". Il effectue ce que tu cherches à faire.

    Bonne lecture...
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
    struct element
    {
      char *val; //lettre alphabet ou chiffre
      char *morse; //équivalent morse
      struct element *suivant;
    };
    typedef struct element ELEMENT;
    typedef struct element *Listes;
     
    Listes add_element(Listes liste, char *Caract, char *Morse)
    {
      Listes NewElement = (Listes)malloc(sizeof(ELEMENT));
      NewElement->suivant = NULL;  // Le dernier élément pointe sur rien.
     
      // Allocation mémoire pour les valeurs caract et morse
      NewElement->val = (char*)malloc(sizeof(char)*strlen(Caract));
      NewElement->morse = (char*)malloc(sizeof(char)*strlen(Morse));
      Listes TmpList = liste;
     
      /* Contrôle si la liste contient au moins un élément. Si ce
       * n'est pas le cas on ne fait qu'affecter le nouvel élément.
       */
      if (liste==NULL) liste = NewElement;
      else
      {
        // Recherche du dernier élément de la liste actuelle
        while (TmpList->suivant!=NULL) TmpList=TmpList->suivant;
     
        // Affectation du nouvel élément à la liste actuelle
        TmpList->suivant = NewElement;
      }
     
      // Affectation des valeurs à Caract et Morse.
      memcpy(NewElement->val, Caract, sizeof(char)*strlen(Caract));
      memcpy(NewElement->morse, Morse, sizeof(char)*strlen(Morse));
     
      return liste;
    }
     
    int
    main(int argc, char *argv [])
    {
      char ligne[20]; //tableau tampon ligne
      char *Caract;
      char *Morse;
      FILE * fichier;
      Listes liste=NULL, TmpList=NULL;
      int compteur=1;
     
      fichier = fopen("liste_conversion.txt","r"); //ouverture du fichier en lecture avec la fonction fopen()
      if (fichier != NULL) //on teste si le fichier existe
      {
        printf("Ouverture du fichier de conversion ok\n"); //affiche «ouverture ok» si l’ouverture s’est bien passée
      }else //sinon
      {
       printf("Ouverture impossible"); //on affiche ouverture impossible
       exit(1); //on force la sortie de la boucle
      }
     
      // Extraction des données du fichier texte et insertion dans la liste chaînée.
      while (fgets(ligne,20,fichier) != NULL)
      {
        Caract = strtok(ligne,"="); 
        Morse = strtok(NULL,"=");
        liste=add_element(liste, Caract, Morse);
      }
     
      // Lecture de la liste chaînée.
      TmpList = liste;
      while (TmpList!=NULL)
      {
        printf("élément %d : ", compteur);
        printf("val = %s\t", TmpList->val);
        printf("morse = %s", TmpList->morse);
        compteur++;
        TmpList = TmpList->suivant;
      }
     
      // Destruction de la liste
      TmpList = liste;
      while (TmpList!=NULL)
      {
        liste=TmpList;
        free(TmpList->val);
        free(TmpList->morse);
        free(TmpList);
        TmpList=liste->suivant;
      }
     
      return 0;
    }

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Pour conserver des données dans une liste chaînée il est nécessaire d'avoir une allocation dynamique.
    En reprenant le code exemple que je t'ai donné j'ai écrit un programme exemple qui alloue chaque élément de la liste dans le tas ainsi que les données "val" et "morse". Il effectue ce que tu cherches à faire.

    Bonne lecture...
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
    struct element
    {
      char *val; //lettre alphabet ou chiffre
      char *morse; //équivalent morse
      struct element *suivant;
    };
    typedef struct element ELEMENT;
    typedef struct element *Listes;
     
    Listes add_element(Listes liste, char *Caract, char *Morse)
    {
      Listes NewElement = (Listes)malloc(sizeof(ELEMENT));
      NewElement->suivant = NULL;  // Le dernier élément pointe sur rien.
     
      // Allocation mémoire pour les valeurs caract et morse
      NewElement->val = (char*)malloc(sizeof(char)*strlen(Caract));
      NewElement->morse = (char*)malloc(sizeof(char)*strlen(Morse));
      Listes TmpList = liste;
     
      /* Contrôle si la liste contient au moins un élément. Si ce
       * n'est pas le cas on ne fait qu'affecter le nouvel élément.
       */
      if (liste==NULL) liste = NewElement;
      else
      {
        // Recherche du dernier élément de la liste actuelle
        while (TmpList->suivant!=NULL) TmpList=TmpList->suivant;
     
        // Affectation du nouvel élément à la liste actuelle
        TmpList->suivant = NewElement;
      }
     
      // Affectation des valeurs à Caract et Morse.
      memcpy(NewElement->val, Caract, sizeof(char)*strlen(Caract));
      memcpy(NewElement->morse, Morse, sizeof(char)*strlen(Morse));
     
      return liste;
    }
     
    int
    main(int argc, char *argv [])
    {
      char ligne[20]; //tableau tampon ligne
      char *Caract;
      char *Morse;
      FILE * fichier;
      Listes liste=NULL, TmpList=NULL;
      int compteur=1;
     
      fichier = fopen("liste_conversion.txt","r"); //ouverture du fichier en lecture avec la fonction fopen()
      if (fichier != NULL) //on teste si le fichier existe
      {
        printf("Ouverture du fichier de conversion ok\n"); //affiche «ouverture ok» si l’ouverture s’est bien passée
      }else //sinon
      {
       printf("Ouverture impossible"); //on affiche ouverture impossible
       exit(1); //on force la sortie de la boucle
      }
     
      // Extraction des données du fichier texte et insertion dans la liste chaînée.
      while (fgets(ligne,20,fichier) != NULL)
      {
        Caract = strtok(ligne,"="); 
        Morse = strtok(NULL,"=");
        liste=add_element(liste, Caract, Morse);
      }
     
      // Lecture de la liste chaînée.
      TmpList = liste;
      while (TmpList!=NULL)
      {
        printf("élément %d : ", compteur);
        printf("val = %s\t", TmpList->val);
        printf("morse = %s", TmpList->morse);
        compteur++;
        TmpList = TmpList->suivant;
      }
     
      // Destruction de la liste
      TmpList = liste;
      while (TmpList!=NULL)
      {
        liste=TmpList;
        free(TmpList->val);
        free(TmpList->morse);
        free(TmpList);
        TmpList=liste->suivant;
      }
     
      return 0;
    }

    Merci beaucoup ça m'a bien aidé , juste une dernière chose (étend débutant en c), la destruction de la liste est-elle nécessaire?
    Le passage d'argument est-il obligatoire dans le int main() dans ce cas? Car je n'ai jamais passé d'arg dans le main.

  10. #10
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 302
    Points : 4 965
    Points
    4 965
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par bretdu55 Voir le message
    ...la destruction de la liste est-elle nécessaire?
    Oui par principe dans cet exemple. Je m'explique. Ici le programme se termine juste après la libération. Donc en principe le système d'exploitation est sensé libérer toute la mémoire utilisée par le processus qui vient de se terminer. Mais comme dit l'"autre", dans le doute on s'abstient.
    En règle générale il faut toujours rendre ce que l'on a pris. En prenant ce bon réflexe tu auras toujours des applications "propres". Ca t'évitera aussi beaucoup d'ennui dans la gestion des pointeurs qui est l'apanage du langage C.
    J'ai d'ailleurs écrit ce code le plus proprement possible sentant bien que la gestion des pointeurs n'est pas encore totalement acquis pour toi.

    Citation Envoyé par bretdu55 Voir le message
    Le passage d'argument est-il obligatoire dans le int main() dans ce cas? Car je n'ai jamais passé d'arg dans le main.
    De nouveau je réponds oui tout simplement parce que c'est le prototype de la fonction main(), du moins sous linux. Ensuite que tu es besoin ou non des arguments passés en ligne de commande importe peu.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Oui par principe dans cet exemple. Je m'explique. Ici le programme se termine juste après la libération. Donc en principe le système d'exploitation est sensé libérer toute la mémoire utilisée par le processus qui vient de se terminer. Mais comme dit l'"autre", dans le doute on s'abstient.
    En règle générale il faut toujours rendre ce que l'on a pris. En prenant ce bon réflexe tu auras toujours des applications "propres". Ca t'évitera aussi beaucoup d'ennui dans la gestion des pointeurs qui est l'apanage du langage C.
    J'ai d'ailleurs écrit ce code le plus proprement possible sentant bien que la gestion des pointeurs n'est pas encore totalement acquis pour toi.


    De nouveau je réponds oui tout simplement parce que c'est le prototype de la fonction main(), du moins sous linux. Ensuite que tu es besoin ou non des arguments passés en ligne de commande importe peu.
    Merci bien pour ton aide, oui comme tu as pu le voir ce n'est pas encore sa ^_^

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 28/06/2011, 17h19
  2. Réponses: 22
    Dernier message: 18/06/2008, 19h01
  3. faire une liste a partir de deux fichiers txt
    Par finelady dans le forum SL & STL
    Réponses: 4
    Dernier message: 15/04/2008, 10h39
  4. Réponses: 2
    Dernier message: 26/01/2007, 14h58
  5. Réponses: 3
    Dernier message: 08/08/2006, 02h50

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