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

 C Discussion :

"initialization makes pointer from integer without a cast" introuvable!


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut "initialization makes pointer from integer without a cast" introuvable!
    Bonjour à tous,

    Voici mon code dans PlanPiste.c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    liste CreerPlanPiste(int nb_lieux)
    {
    	lieu TabDeLieux = (lieu)malloc(nb_lieux*sizeof(Lieu));
    	liste MonPlanPiste = (liste)malloc(sizeof(Liste));
    	MonPlanPiste->nb_elements = nb_lieux;
    	MonPlanPiste->tab = TabDeLieux;
    	return MonPlanPiste;
    }
    Dans Lieu.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    lieu CreerLieu(int numero_lieu, int altitude_lieu, char* nom_lieu, chemin chemin_relie)
    {
    	lieu MonLieu = (lieu)malloc(sizeof(Lieu));
    	MonLieu->num = numero_lieu;
    	MonLieu->altitude = altitude_lieu;
    	MonLieu->nomlieu = nom_lieu;
    	chemin MonChemin = (chemin)malloc(sizeof(Chemin));
    	MonChemin = chemin_relie;
    	MonLieu->next=chemin_relie;
    	return MonLieu;
    }
    Dans Chemin.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    chemin CreerChemin(int voisin, char* type, int temps, int debit)
    {
    	chemin MonChemin = (chemin)malloc(sizeof(Chemin));
    	MonChemin->voisin=voisin;
    	MonChemin->type=type;
    	MonChemin->temps=temps;
    	MonChemin->debit=debit;
    	MonChemin->next=NULL;
    	return MonChemin;
    }
    Et dans Main.c
    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
    int main ()
    {
    	liste PP = CreerPlanPiste(3);
    	chemin c1 = CreerChemin(1, "string", 1, 1);
    	chemin c2 = CreerChemin(2, "string2", 2, 2);
    	chemin c3 = CreerChemin(3, "string3", 3, 3);
    	chemin c4 = CreerChemin(4, "string4", 4, 4);
    	c1->next=c2;
    	lieu l1 = CreerLieu(1, 1500, "blabla", c1);
    	lieu l2 = CreerLieu(2, 2000, "blabla2", c3);
    	lieu l3 = CreerLieu(3, 2500, "blabla3", c4);
    	PP->tab[0]=*l1;
    	PP->tab[1]=*l2;
    	PP->tab[2]=*l3;
    
    	AffichePlanPiste(PP);
    	return 0;
    }
    Le compilateur m'affiche "initialization makes pointer from integer without a cast" aux lignes en rouge. Je sais que ce doit etre un truc tout bete, mais ça fait des heures que je cherche sur Google, et je n'arrive pas à comprendre pourquoi il me met ça. J'ai essayé pas mal de modifs, mais elles aboutissent toutes à davantage d'erreurs!

    A l'aide! Et merci d'avance!

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Salut

    Il faudrait que tu nous donnes les définitions des structures, ainsi que tous tes typedef (cacher des pointeurs dans des typedef, c'est moyen pour la lecture du code).

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Avec joie.

    Lieu.h
    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
    #ifndef LIEU
    #define LIEU
     
    struct s_lieu
    {
    	int num;
    	char * nomlieu;
    	int altitude;//Servira peut etre pas
    	struct s_chemin * next;
    } ;
     
    typedef struct s_lieu Lieu;
    typedef struct s_lieu *lieu ;
     
     
    #endif
    PlanPiste.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef LISTE
    #define LISTE
     
    struct s_liste
    {
    	int nb_elements;
    	struct s_lieu *tab;
    } ;
     
    typedef struct s_liste Liste;
    typedef struct s_liste *liste ;
     
     
    #endif
    Chemin.h
    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
    #ifndef CHEMIN
    #define CHEMIN
     
    struct s_chemin
    {
    	int voisin;//identifiant du voisin
    	char * type;
    	int temps;
    	int debit;
    	struct s_chemin * next;
    } ;
     
    typedef struct s_chemin Chemin;
    typedef struct s_chemin *chemin ;
     
     
    #endif
    Merci d'avance. ^^

  4. #4
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    Quelques remarques sur ton code:
    -Tu fais une allocation dynamique que tu n'utilise pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    chemin MonChemin = (chemin)malloc(sizeof(Chemin));/*ici tu alloues 
    de la mémoire*/
    	MonChemin = chemin_relie;/*tu fais pointer le pointeur vers une 
    autre adresse, la mémoire réservée précédemment est perdue*/
    -Ensuite tu fais à deux reprises des affectations de chaines de caracteres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MonChemin->type=type;
    ...
    MonLieu->nomlieu = nom_lieu;
    Or lorsqu'il s'agit de tableaux cette syntaxe est inapropriée, dans le cas des chaînes de caractères il faut utiliser strcpy() de la bibliotheque string.h

  5. #5
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Le compilateur m'affiche "initialization makes pointer from integer without a cast" aux lignes en rouge.
    Probablement, main.c ne connait pas le prototype des fonctions CreerPlanPiste() , CreerChemin() et CreerLieu() et le compilateur suppose qu'elles renvoient un int. Si c'est le cas, un compilateur bien réglé aurait dû émettre un avertissement concernant l'absence de ces prototypes.
    Placer les prototypes dans les .h associés aux .c où se trouve les définitions des fonctions et faire les include dans le main.c

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Merci à tous, ça marche!

    Reste plus qu'à trouver ce fichu Segmentation Fault maintenant!

Discussions similaires

  1. Réponses: 9
    Dernier message: 02/01/2012, 00h02
  2. assignment makes pointer from integer without a cast
    Par morpheusmg dans le forum Débuter
    Réponses: 4
    Dernier message: 27/11/2011, 18h31
  3. Réponses: 2
    Dernier message: 12/11/2010, 13h11
  4. Réponses: 3
    Dernier message: 08/09/2009, 10h40
  5. Réponses: 6
    Dernier message: 11/05/2006, 23h08

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