#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 !
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
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 => 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 !
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 !
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é