à l'aide
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

à l'aide



  1. #1
    pseudomehdi

    Post à l'aide


    ------

    salut, je sollicite votre aide car je ne sais pas si le problème vient de du code ou du compilateur, le programme créée une liste en saisissant une chaîne de caractères et en la plaçant dans le champ d'une structure.
    merci d'a.vance

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #define nb 5
    typedef struct mot 
    {
    	char* valeur;
    	struct mot *suivant;
    }mot;
    
    
    mot *fonction( mot *liste);
    
    mot *fonction( mot *liste)
    {  int i;
       
       
      mot *tamp;
      tamp=(mot*)malloc(sizeof(mot));   //allocation dynamique.
      if(tamp==NULL)
      {
      	fprintf(stderr, "probleme d'allocation" );                    // erreur si l'allocation échoue. 
      	exit(EXIT_FAILURE);
      }
       	char test[20];                                                      //allocation d'un tableau statique.
       	printf("donner la valeur de la chaine de charactere  :\n");
       	fgets(test, 20, stdin);                                         // lire la chaîne et la placer dans la mémoire à partir de l'adresse test.
      tamp->valeur=test;                                                // affecter la chaîne au champ "valeur" de la structure.
      tamp->suivant=NULL;
      if(liste==NULL)                             //si la liste est nulle alors on la créée en lui affectant le maillon(structure tamp) qu'on vient d'initialiser.
      {
      	liste=tamp;
       }
      else                                        // sinon on ajoute la stucture "tamp" comme nouveau maillon à la suite du dernier maillon de la liste.
      {
      tamp->suivant=liste;
      liste=tamp; 
    }
      
      return liste;
    }
    
    int main()
    {
    	int i;
    	mot *liste=NULL;
    	mot *t[nb];
    	
       	for(i=0;i<nb;i++)                 //creation de la liste
       {
      
       liste =fonction( liste);
       t[i]=liste;
       }
    
       for(i=0;i<nb;i++)                  // affichage de la liste de deux façon : 1-en utilisant le tableau 2-en utilisant uniquement les pointeurs.
       {
       	    mot *foo;
       	    foo=liste;
       		printf("t[%d] = %s\n",i, (*t[i]).valeur);
       		printf("valeur[%d] = %s\n",i, liste->valeur);
       		liste=liste->suivant;
       	    free(foo);
       	    
       	}
    	return 0;
    }

    -----
    Dernière modification par pseudomehdi ; 26/01/2018 à 09h02.

  2. #2
    pseudomehdi

    Re : à l'aide

    j'ai ce genre de résultat bizard
    Images attachées Images attachées  

  3. #3
    pseudomehdi

    Re : à l'aide

    j'écris des chaines différentes mais le programme affiche toujours la dernière dans tout les maillons :/
    Images attachées Images attachées

  4. #4
    albanxiii
    Modérateur

    Re : à l'aide

    Bonjour,

    Vous n'avez pas alloué de mémoire pour stocker autre chose qu'un pointeur vers un char dans le champ valeur de votre structure mot.
    Not only is it not right, it's not even wrong!

  5. A voir en vidéo sur Futura
  6. #5
    pseudomehdi

    Re : à l'aide

    mais si, j'ai alloué un tableau statique, je l'ai rempli en utilisant la fonction fgets() ensuite j'ai filé son adresse au champ valeur via le pointeur de structure tamp, c'est la même chose,je ne pense pas que ce soit un problème d'allocation sinon j'aurais eu des bugs du genre le programme s'arrête brusquement.

  7. #6
    Jack
    Modérateur

    Re : à l'aide

    j'ai alloué un tableau statique
    qui sera situé dans la pile et qui va disparaitre dès que la fonction sera terminée. Donc le pointeur valeur de la structure pointera sur la pile qui ne va pas cesser de changer.
    Comme Albanxiii le souligne, il faut réserver de la place pour la chaine avec un malloc.

  8. #7
    pseudomehdi

    Re : à l'aide

    finalement c'était ça, un problème d'allocation un tableau statique dans une fonction pour allouer de l'espace mémoire c'était pas une bonne idée, merci beaucoup pour vous deux, je commençais à désespérer.

Discussions similaires

  1. aide branchement ventilo pc sur secteur avec transfo (photo pour aide)
    Par invite28620afc dans le forum Bricolage et décoration
    Réponses: 3
    Dernier message: 22/02/2015, 22h56
  2. aide svp quel antivirus choisir svp, merci infiniment de votre aide
    Par invitebd78b003 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 5
    Dernier message: 11/11/2012, 21h35
  3. [Aide SVT]1ere S aide L'ouverture de l'océan Atlantique Nord
    Par invite6f6226b6 dans le forum Géologie et Catastrophes naturelles
    Réponses: 7
    Dernier message: 30/04/2010, 22h26
  4. Réponses: 0
    Dernier message: 15/02/2007, 10h03