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 :

calc in free(): warning: junk pointer, too high to make sense.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Par défaut calc in free(): warning: junk pointer, too high to make sense.
    voila je fai une bistromathique (calculatrice a valeur infini) et lorsque je compil tout va bien mais des lors que j execute mon programme compiler j ai "calc in free(): warning: junk pointer, too high to make sense." suivi du resultat exacte (donc ma fonction modulo marche), calc correspond au nom du programme compiler, je pige pas d ou vien lerreur, je sait lire l anglais et je compren ce qu il me raconte mais je pige pas d ou ca sort, lerreur intervient des la ligne "res = mul(x.tmp, b, res, base, neg);" mul est la fonction multiplier et elle possede un free() a la fin qui ne pose pa de probleme, help me

  2. #2
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour,

    Sans code source, il nous sera difficile de t'aider. Livre-nous un programme minimal reproduisant ton erreur ou au minimum le code de la fonction mul.

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par yvesall
    voila je fai une bistromathique (calculatrice a valeur infini) et lorsque je compil tout va bien mais des lors que j execute mon programme compiler j ai "calc in free(): warning: junk pointer, too high to make sense."
    "calc dans la fonction free() : Attention : pointeur de merde (sic !), sa valeur est trop élevée pour être honette."

    (il est marrant ton système !)

    suivi du resultat exacte (donc ma fonction modulo marche), calc correspond au nom du programme compiler, je pige pas d ou vien lerreur, je sait lire l anglais et je compren ce qu il me raconte mais je pige pas d ou ca sort, lerreur intervient des la ligne "res = mul(x.tmp, b, res, base, neg);" mul est la fonction multiplier et elle possede un free() a la fin qui ne pose pa de probleme,
    Ma boule de cristal étant en congé en ce 1 er Novembre, il va falloir que je vois ton code. Mais d'après le Marc de Café, "tu ne passes pas à free() la valeur exacte que t'a donné malloc()". Pas de p++ ou de p-- en vue ?

  4. #4
    Membre éclairé
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Par défaut
    euh tu me di ""tu ne passes pas à free() la valeur exacte que t'a donné malloc()". Pas de p++ ou de p-- en vue ?", je suppose ke lorske je malloc un char *tmp; je doit frier mon tmp donc free(tmp), je vois pas ou pourrai etre le souci, je ne change pas en cour de route la taille de mon tmp, de plus jai un sousci avec ton p++ ou p--, pa compri ce que tu veu dir, et pour ce qui est du code source, sachan que je le fait pour un projet de groupe, il serai suicidair de balancer mon code sur la toil, sachan que si d autre groupe tombe sur ma fonction et font un cp coller et bien je serai noter -42/20 pour tricherie (2 code identique passe mal), je sais combien c est pas evident de filer un coup de main sur un script k on a pas sous les yeux, mais je ne peu pa courir ce risque, je posai la question uniquement pour savoir si qqun avait deja rencontrer une erreur semblable, et sa methode de resolution, merci tout de meme

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Cette erreur est un diagnostic de la libc sous certains systemes (BSD notamment). Elle signifie que le pointeur passe a free() contient une adresse qui est superieure a la gamme connue par malloc().
    Deux raisons possibles:
    - tu as modifie la valeur du pointeur retourne par malloc() avant l'appel a free().
    - tu essaies de liberer un pointeur qui ne correspond pas a un bloc alloue par malloc().
    Sans code, impossible d'etre plus precis.

    PS: Travaille un peu l'orthographe, s'il te plait !

  6. #6
    Membre éclairé
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Par défaut
    in fact je suis sous BSD, et je suis navre pour l orthographe mais les clavier qwetry on une tendance a me faire ecrire comme un porc et puis j ai souvent oublie d aller en cours de francais :/ :p

    alors en effet je modifie la valeur de tmp en lui rentrant une chaine de caractere, mais je ne comprend pas pourquoi ca foire, dans le sens ou si la chaine entree est trop grande j aurais un segfault et si elle est plus petite ca ne devrait pas poser de souci non plus puis que j ai initialiser mon tmp avec des 0.

    et je n ai pas fais de p++ en cours de route, je suis pas si nul que ca

    je vais creuser mais techniquement je vois pas ou est la couille.. voila :)

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par yvesall
    je modifie la valeur de tmp en lui rentrant une chaine de caractere
    free() doit recevoir l'adresse renvoyee par malloc(). Rien d'autre.
    Si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char *tmp = malloc(123);
    ...
    tmp = "This is a string."; /* ou tout autre tmp = , tmp++, tmp--, etc. */
    ...
    free(tmp);
    tu as un bug. Tu pourrais certainement poster les parties du code qui posent probleme, sans reveler les secrets industriels contenus dans ton code...

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par yvesall
    alors en effet je modifie la valeur de tmp en lui rentrant une chaine de caractere,
    C'est à dire ?
    suivi de
    Alors, oui, c'est le drame !
    mais je ne comprend pas pourquoi ca foire, dans le sens ou si la chaine entree est trop grande j aurais un segfault et si elle est plus petite ca ne devrait pas poser de souci non plus puis que j ai initialiser mon tmp avec des 0.
    strcpy(), ça te dis quelque chose ?

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par yvesall
    euh tu me di ""tu ne passes pas à free() la valeur exacte que t'a donné malloc()". Pas de p++ ou de p-- en vue ?", je suppose ke lorske je malloc un char *tmp; je doit frier mon tmp donc free(tmp), je vois pas ou pourrai etre le souci, je ne change pas en cour de route la taille de mon tmp, de plus jai un sousci avec ton p++ ou p--, pa compri ce que tu veu dir, et pour ce qui est du code source, sachan que je le fait pour un projet de groupe, il serai suicidair de balancer mon code sur la toil, sachan que si d autre groupe tombe sur ma fonction et font un cp coller et bien je serai noter -42/20 pour tricherie (2 code identique passe mal), je sais combien c est pas evident de filer un coup de main sur un script k on a pas sous les yeux, mais je ne peu pa courir ce risque, je posai la question uniquement pour savoir si qqun avait deja rencontrer une erreur semblable, et sa methode de resolution, merci tout de meme
    Les mots soulignés sont les mots (non techniques) inconnus du correcteur d'orthographe de Firefox 2. Et je ne parle pas des dizaines de fautes de grammaire... et de l'expression parfois douteuse...

    Tu crois franchement qu'un informaticien qui écrit le français comme ça a la moindre de chance de faire carrière dans ce métier ?

    L'informatique, c'est essentiellement de la lecture, de l'analyse, de la logique, de la rédaction, de la syntaxe et de la sémantique. Très peu de math contrairement à ce qu'on croit souvent...

    Quand à ton problème, tu dois vérifier si la valeur que tu passes à free() est identique à celle que t'a donné malloc(). Si tu as fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char *p = malloc(123):
    p++;
    free (p);
    c'est le drame.

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

Discussions similaires

  1. DXX32: Warn: Registry value too long
    Par korsakoff69 dans le forum DirectX
    Réponses: 1
    Dernier message: 03/06/2012, 00h56
  2. Réponses: 3
    Dernier message: 19/03/2009, 10h56
  3. Réponses: 15
    Dernier message: 21/01/2009, 15h21
  4. * glibc detected * free(): invalid pointer
    Par ViRouF dans le forum C
    Réponses: 4
    Dernier message: 28/03/2007, 17h10
  5. Réponses: 3
    Dernier message: 12/01/2007, 10h25

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