Erreur comparaison pointeur à un entier

Fermé
dachitaib Messages postés 4 Date d'inscription lundi 19 novembre 2012 Statut Membre Dernière intervention 4 décembre 2012 - 4 déc. 2012 à 09:08
 Utilisateur anonyme - 4 déc. 2012 à 14:50
Bonjour tout le monde, dans le cadre de mon projet on nous a demandé de faire un modèle de liste, voila ce que j'ai fait au début
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "list.h"

list *creation_list()
{
list* l = NULL;
return l;
}


void insertion_tete(list** l, void* valeur)
{
	list *p=(list*)malloc(sizeof(list));
	p->val=valeur;
	p->suivant=*l;
	*l=p;
}

void insertion_queue(list** l, void* valeur)
{
	list *elementpos=(*l);
	list *p=(list*)malloc(sizeof(list));
	p->val=valeur;
        p->suivant=NULL;

	while(elementpos->suivant != NULL)
	{
	elementpos=elementpos->suivant;
	}
		elementpos->suivant=p;
}


void supprimerElementEnTete(list** l)
{
	list *p;
    if(l != NULL)
    {
	p=*l;
	*l=(*l)->suivant;
  
        free(p);
        
    }
    else
    {
       printf("Liste Vide");
    }
}

void supprimeElement(list ** l,int x)
{
	list *p,*pred;
	if( (*l)->val == x)
	{	 p=*l;
 		*l=(*l)->suivant;
 		free(p);
	}
	else
	{	pred=*l;
 		p=pred->suivant;
 		while(p!=NULL && p->val != x)
		{ 	pred=p;
 			p=pred->suivant;
		}
		if(p==NULL)
		printf("inexistant");
		else 
		{
		pred->suivant=p->suivant;
		free(p);
		}
	}
}



tout marche à merveille à part la dernière fonction qui devrait chercher un element et le supprimer ... on m'indique le message suivant : "list.c:56: erreur:comparaison entre un pointeur et un entier"

Voici le fichier Main

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "list.h"


int main()
{
	
	list *deb=creation_list();
	list *temp;
	int *i=(int*)malloc(sizeof(int));
	int *j=(int*)malloc(sizeof(int));
	int *k=(int*)malloc(sizeof(int));
	int *l=(int*)malloc(sizeof(int));
	int *r=(int*)malloc(sizeof(int));
	
	*i=3;
	*j=7;
	*k=19;
	*l=100;
	*r=150;
	insertion_tete(&deb,i);
	insertion_tete(&deb,j);
	insertion_tete(&deb,k);
	insertion_queue(&deb,l);
	insertion_queue(&deb,r);
	temp=deb;
	while(temp!=NULL)
	{
		printf("%d \t", (*(int*)temp->val));
		temp=temp->suivant;
	}
	printf("\n");

	supprimerElementEnTete(&deb);
	temp=deb;
	while(temp!=NULL)
	{
		printf("%d \t", (*(int*)temp->val));
		temp=temp->suivant;
	}
	printf("\n");

	
	supprimeElement(&deb,3);
	
	while(temp!=NULL)
	{
		printf("%d \t", (*(int*)temp->val));
		temp=temp->suivant;
	}
	printf("\n");

	
	free(i);
	free(j);
	free(k);
	free(l);
	free(r);
	
	return 0;
}



SVP , Aidez moi je me plante :( Et Merci Infiniment de bien vouloir m'aider.

A voir également:

1 réponse

Utilisateur anonyme
4 déc. 2012 à 14:50
Comme le dit si bien ton message d'erreur, à la ligne 56 de ton fichier list.c, tu compares un pointeur à un entier. Tu sais que c'est interdit ? Car ça ne veut rien dire.
Tu peux comparer deux pointeurs (ton pointeur et l'adresse d'un entier) ou deux entiers (ce qui est pointé par le pointeur et ton entier) mais pas deux variables différentes.
Dans ton cas précis :
(*l)->val == x est incorrect

(*l)->val == &x // comparaison de deux pointeurs

ou
*(int*)((*l)->val) == x // comparaison de deux entiers

seraient syntaxiquement corrects, mais la comparaison de deux pointeurs ne voudrait rien dire, car x est une variable locale et son adresse n'a rien à voir avec ta liste.

En fait, il y a pour moi un problème de logique dans ta démarche :
- Soit ta liste est dédiée à des entiers, et son champ val devrait être un int et non pas un int*, et tes fonction d'insertion devraient donc avoir des int et non pas des int * comme paramètres
- Soit ta liste est plus générale, et il faut alors qu'elle mémorise le type de variable stockée à chaque noeud, pour que ta fonction de suppression sache si elle doit comparer deux char, deux entiers, deux structures... pour trouver le noeud à détruire
0