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 :

Une erreur provenant d'un free. [Débutant(e)]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 27
    Par défaut Une erreur provenant d'un free.
    Voila j'ai un probleme assez simple lorsque j'execute ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main(void)
    {
    	char* name = (char*)malloc(5*sizeof(char));
    	memset(name,0,5);
    	name="test";
    	printf(name);
     
    	free(name);  // l'erreur intervient ici ...
     
    	return 0;
    }
    Une erreur (assertion failure je crois : ) survient lorsque le programme rencontre l'instruction free(name) ... et la heu je ne parviens vraiment pas à comprendre a quoi c'est du :p

    Quelqun saurait comment resoudre cet epineux probleme ? xD

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par bidoo Voir le message
    Voila j'ai un probleme assez simple lorsque j'execute ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main(void)
    {
    	char* name = (char*)malloc(5*sizeof(char));
    	memset(name,0,5);
    	name="test";
    	printf(name);
     
    	free(name);  // l'erreur intervient ici ...
     
    	return 0;
    }
    Une erreur (assertion failure je crois : ) survient lorsque le programme rencontre l'instruction free(name) ... et la heu je ne parviens vraiment pas à comprendre a quoi c'est du :p

    Quelqun saurait comment resoudre cet epineux probleme ? xD
    C'est tout a fait normal. Tu essayes de libérer de la mémoire qui n'a pas été allouer par malloc(). Donc le plantage est garantie !!!
    Ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(void)
    {
    	char *name = malloc(5);
    	strcpy(name, "test");
    	printf("%s\n", name);
    	free(name);
    	return 0;
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 27
    Par défaut
    arf je viens de comprendre que
    semble changer ce que pointe name

    Merci beaucoup croco !

  4. #4
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par bidoo Voir le message
    arf je viens de comprendre que
    semble changer ce que pointe name

  5. #5
    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 bidoo Voir le message
    arf je viens de comprendre que
    semble changer ce que pointe name
    C'est pas 'semble'.

    Le rôle de l'opérateur '=' est clair : affecter la valeur de l'opérande de droite (R-value) à l'opérande de gauche (L-value). C'est un peu le B.A. BA de la programmation, non ?

    Je rappelle qu'en langage algorithmique, on écrit :

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/07/2014, 11h30
  2. free provoquant une erreur
    Par GLDavid dans le forum Bibliothèque standard
    Réponses: 8
    Dernier message: 19/10/2009, 16h50
  3. erreur 00905 sur une requête provenant d'access
    Par amamildor dans le forum SQL
    Réponses: 4
    Dernier message: 09/10/2007, 14h05
  4. [Free Pascal] Aide pour comprendre une erreur de compilation
    Par SimoBenz dans le forum Free Pascal
    Réponses: 7
    Dernier message: 05/12/2006, 18h43
  5. Une erreur sur le free.. Oui mais pourquoi ?
    Par MonsieurAk dans le forum C
    Réponses: 7
    Dernier message: 22/12/2005, 20h51

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