Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/05/2008, à 23:01

Jeff127

[langage C] assignment from incompatible pointer type

Bonjour

Dans mon petit programme j'ai beaucoup de Warnings du genre:

attention : assignment from incompatible pointer type

Cela référence vers la ligne

      ptrl = ptrl->suivante;

du fichier.c


fichier .h

typedef struct

{

  	char nom[LongueurMAX];		/* Chaine de caractere de la cellule */
	struct Cellule* suivante;	/* Pointeur vers la cellule suivante */

}Cellule;

void afficher_Contenu_liste(Cellule* ptrl);

fichier.c

void afficher_Contenu_liste(Cellule* ptrl)

{

  	int count = 0;

  	while (ptrl!=NULL)

    {

      fprintf(stdout,"Cellule %3d : %s\n",count++,ptrl->nom);

      ptrl = ptrl->suivante;

    }

J'ai chercher une correction pour ne plus avoir les warnings... mais je ne trouve pas,
j'ai vu dans google que ça pourrait venir du .h mais je trouve pas...


Auriez-vous une solution?

Merci d'avance de votre aide

#2 Le 05/05/2008, à 00:47

Le Farfadet Spatial

Re : [langage C] assignment from incompatible pointer type

Salut à tous !

Jeff127 a écrit :

Dans mon petit programme j'ai beaucoup de Warnings du genre:

attention : assignment from incompatible pointer type

Essaye plutôt ça :

typedef struct Cellule_ {
  char nom [LongueurMAX];     /* Chaine de caractere de la cellule */
  struct Cellule_ *suivante;  /* Pointeur vers la cellule suivante */
} Cellule;

Puisque visiblement tu implémentes une liste chaînées, je te conseille cet ouvrage :

      Kyle LOUDON, Maîtrise des Algorithmes en C, O'Reilly.

   À bientôt.

                                                                                                                          Le Farfadet Spatial

Dernière modification par Le Farfadet Spatial (Le 05/05/2008, à 00:50)

Hors ligne

#3 Le 05/05/2008, à 07:53

AuraHxC

Re : [langage C] assignment from incompatible pointer type

j'ai ce bouquin qui est effectivement un très bon bouquin par contre je sais pas si il pourrait lui convenir car dans le bouquin le code source est plutôt difficile a comprendre car Kyle Loudon produit un code générique.
Mais par contre les algos et les explications peuvent vraiment aider wink

Je conseil pour l'algorithmie celui-ci je sais pas si tu es d'accord avec mon choix Farfadet :http://www.eyrolles.com/Informatique/Li … hmique.php
C'est introduction à l'algorithmique wink => Il est je trouve très complet (1100 pages) avec des explications mathématiques plutôt poussé et les algos en pseudo-code plutôt simple à transcrire en langage C par exemple.

Hors ligne

#4 Le 05/05/2008, à 09:39

Jeff127

Re : [langage C] assignment from incompatible pointer type

Merci de votre réponse, ça m'a bien aidé.

J'ai un autre problème qui est survenu hier, quand ma première liste s'affiche, après le dernier élément (le 114ème)
la console me met:

Erreur de segmentation (core dumped)

En cherchant sur internet, j'ai vu que cela venait d'un stack overflow peut-être...
Comment puis-je corriger ma fonction pour ne plus avoir cette erreur de segmentation?

ma fonction d'affichage pour rappel:

void afficher_Contenu_liste(Cellule* ptrl)
{
      int count = 0;
      while (ptrl!=NULL)
    {
           fprintf(stdout,"Cellule %3d : %s\n",count++,ptrl->nom);
          ptrl = ptrl->suivante;
    }
}

Merci à tous de votre aide

#5 Le 05/05/2008, à 10:11

AuraHxC

Re : [langage C] assignment from incompatible pointer type

Il faudra que tu utilise l' utilitaire GDB qui te permet de debugger un programme => tu peux mettre des break point, afficher le contenu d'une variable etc... donc si tu parcours l'exécution de ton programme pas à pas tu pourras sûrement voir ce qui cloche.
En tout cas je trouve que GDB est un bon réflexe pour les problèmes avec un programme.

Mais je viens de penser => pour les problèmes de mémoire tu devrais plutôt voir avec VALGRIND qui va t'indiquer où il y a un soucis avec la mémoire donc la cause de ton Erreur de segmentation (core dumped).

Hors ligne

#6 Le 05/05/2008, à 13:34

Plum

Re : [langage C] assignment from incompatible pointer type

Si tu pouvais nous montrer la creation et le remplissage de la liste ?
Utilise gdb, a mon avis tu auras le segfault sur la ligne : ptrl = ptrl->suivante.

Hors ligne

#7 Le 05/05/2008, à 13:53

yohann

Re : [langage C] assignment from incompatible pointer type

valgrind + gdb


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

#8 Le 05/05/2008, à 14:33

Le Farfadet Spatial

Re : [langage C] assignment from incompatible pointer type

Salut à tous !

AuraHxC a écrit :

Je conseil pour l'algorithmie celui-ci je sais pas si tu es d'accord avec mon choix Farfadet :http://www.eyrolles.com/Informatique/Li … hmique.php

Vu le nombre de fois où je l'ai conseillé sur ce site, on va même finir par croire que je touche une commission à chaque achat d'un volume ! Pourtant, cette fois-ci, ce n'est pas moi qui en ai parlé. Cela dit, en effet, c'est un excellent ouvrage, à mettre dans toutes les mains.

   Le Loudon est moins complet, mais à cet avantage qu'il s'agit d'une application directe et concrète en C. Se plonger dedans permet de voir de bonnes pratiques, dans des cas concret. Et d'éviter certains écueils.

   À bientôt.

                                                                                                                         Le Farfadet Spatial

Hors ligne

#9 Le 05/05/2008, à 14:37

Le Farfadet Spatial

Re : [langage C] assignment from incompatible pointer type

Salut à tous !

Jeff127 a écrit :

J'ai un autre problème qui est survenu hier, quand ma première liste s'affiche, après le dernier élément (le 114ème)
la console me met:

Erreur de segmentation (core dumped)

En effet, valgrind et gdb sont deux outils qui te permettront d'explorer ce qui se passe pendant l'exécution de ton programme. D'autre part, effectivement, pour t'aider il nous faudrait un peu mieux savoir comment est gérée ta liste et notamment comment se passe la création.

   Typiquement, ce genre d'erreur arrive lorsque l'on cherche à accéder en dehors de la liste, c'est-à-dire lorsque le test de fin de liste n'est pas bien fait.

   À bientôt.

                                                                                                                         Le Farfadet Spatial

Hors ligne

#10 Le 05/05/2008, à 23:03

Zoltan_K

Re : [langage C] assignment from incompatible pointer type

Salut,

Comme l'a dit Farfadet, ce genre d'erreur viens du fait que tu cherches a acceder a de la memoire a laquelle tu n'as pas acces.

Comme tu boucles tant que ptrl != NULL, je vois 2 sources d'erreurs possibles (dans les 2 cas, man memset sera ton ami) :
- Soit le pointeur 'suivante' du dernier element de ta liste chainee n'est pas NULL, du coup tu rentres quand meme dans la boucle et tu as une erreur de segmentation (Segmentation Fault pour les intimes) quand tu fais ptrl = ptrl->suivante (Si le fprintf n'a pas plante avant pour la meme raison)

- Soit tu mets bien le pointeur 'suivante'  du dernier element a NULL mais des elements de ta liste ont des pointeurs 'noms' a des valeurs quelconques et c'est la que ca plante...

Dans les 2 cas,

memset(ptrl, 0, sizeof(*ptrl))

juste apres l'allocation de chaque element devrait resoudre ton soucis

ps : desole pour les accents mais y'en a pas sur les qwerty...

Dernière modification par Zoltan_K (Le 05/05/2008, à 23:04)


Que cherchait à faire l'Homme quand il a découvert que la vache donnait du lait ?

Hors ligne

#11 Le 06/05/2008, à 09:36

Jeff127

Re : [langage C] assignment from incompatible pointer type

merci de vos réponses, cela m'a bien aidé smile