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 :

assignment makes integer from pointer without a cast


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut assignment makes integer from pointer without a cast
    Bonjour à tous,

    Commençons si vous le voulez bien directement dans le vif du sujet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void LCDM_ajouter(LCDM_ListeChainee* pl, Mot m){
        LCDM_ListeChainee pNoeud=(LCDM_ListeChainee)malloc(sizeof(LCDM_Noeud));
        Mot *m2;
        if (pNoeud!=NULL){
            errno=0;
            mot(m,m2);
            *pNoeud->lElement=m2;
            pNoeud->listeSuivante=*pl;
            *pl=pNoeud;    
        }
        else {
            errno=LCDM_ERREUR_MEMOIRE;    
        }    
    }
    Le message d'erreur est en PJ.

    Je précise que :

    - le type Mot est un char[40]
    - le type LCDM_ListeChainee est défini ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct LCDM_Noeud* LCDM_ListeChainee;
    typedef struct LCDM_Noeud {
        Mot lElement;
        LCDM_ListeChainee listeSuivante;
    } LCDM_Noeud;
    J'espère vous avoir donné assez d'éléments pour m'aider
    Merci à tous ceux qui prendront un peu de leur temps pour le faire.

    EDIT : Par ailleurs tout commentaire supplémentaire qui ne concernerait pas cette erreur est le bienvenu !
    Images attachées Images attachées  

  2. #2
    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
    - Mot est un char[40] donc m2 qui est un Mot* est un char (*)[40] (un pointeur sur un tableau de 40 char)

    - *pNoeud->lElementest un char.

    - Donc l'expression *pNoeud->lElement=m2; équivaut à essayer de faire char = pointeur.
    Ceci ne peut se faire sans cast explicite et traduit le plus fréquemment une erreur dans le programme et c'est certainement le cas ici.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Cette ligne est suspecte, tu passes une variable non-initialisée à la fonction mot.

    PS: En C, tu n'as pas besoin de caster le retour de malloc(). Si le retrait du cast provoque une erreur, c'est que tu compiles en fait en C++.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par diogene Voir le message
    - Mot est un char[40] donc m2 qui est un Mot* est un char (*)[40] (un pointeur sur un tableau de 40 char)

    - *pNoeud->lElementest un char.

    - Donc l'expression *pNoeud->lElement=m2; équivaut à essayer de faire char = pointeur.
    Ceci ne peut se faire sans cast explicite et traduit le plus fréquemment une erreur dans le programme et c'est certainement le cas ici.
    Bonjour, et merci de vos réponses.
    Le problème est que justement je ne comprends/vois pas la ou les erreurs en question.
    Un p'tit coup de main ?

    Encore merci.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par MaybeMaybe Voir le message
    Bonjour, et merci de vos réponses.
    Le problème est que justement je ne comprends/vois pas la ou les erreurs en question.
    Un p'tit coup de main ?
    Salut

    C'est difficile de dire mieux. Essaye de te demander si définir m2 comme un pointeur sur un char[40] est une bonne idée vu que tu appelles mot() en y passant m (un "mot") et m2 (un "mot étoile")... Sans connaitre le détail de cette fonction, je suis quasiment sûr qu'elle opére une espèce de recopie (comme strcpy) ou autre travail entre m et m2 et que donc ces deux variables devraient être de même type. Or le type "Mot" n'est absolument pas de même type qu'un type "Mot étoile"...

    Ceci dit, je suis de plus en plus étonné de voir fleurir de partout des programmes où on masque les pointeurs derrière des types et maintenant on va jusqu'à masquer les tableaux. Je ne sais pas qui t'a appris à faire ça mais je t'assure que ce n'est pas du tout une bonne idée. Ici on n'est pas en C# ou en Java où c'est le compilo qui s'occupe de traduire les intentions du programmeur et de mettre des "&" là où il faut quand ça été oublié. Ici, le compilo C fait exactement ce que tu lui indiques, ni plus, ni moins. Et donc il vaut mieux garder en permanence à l'esprit quand une variable est un pointeur et vers quoi elle pointe...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Citation Envoyé par MaybeMaybe Voir le message
    Bonjour, et merci de vos réponses.
    Le problème est que justement je ne comprends/vois pas la ou les erreurs en question.
    Un p'tit coup de main ?

    Encore merci.
    L'erreur pour faire très simple c'est de vouloir faire rentrer un triangle dans un trou carré d'une boite pour enfant.
    Cela fini toujours par fonctionner mais cela abime la boite...
    Et ce qu'on veut faire comprendre à l'enfant avec ce jeu c'est que c'est un carré qu'il faut mettre dans le trou carré et non un triangle.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Roger !

    Merci de vos réponses.
    J'ai corrigé le problème en réfléchissant effectivement davantage aux types de mes variables.
    C'est le seul conseil que je peux donner aux personnes qui tomberaient sur ce forum plus tard en rencontrant le même type de problème.

    Je passe le sujet en Résolu, encore merci à la communauté de ce forum, étonnamment actif c'est agréable

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/05/2014, 00h29
  2. Réponses: 2
    Dernier message: 02/04/2010, 12h44
  3. Réponses: 3
    Dernier message: 19/03/2009, 10h56
  4. Probleme de pointer without of cast
    Par CyberTwister dans le forum Windows
    Réponses: 5
    Dernier message: 06/04/2007, 13h45
  5. Réponses: 25
    Dernier message: 04/10/2006, 00h33

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