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 :

pourquoi un free plante le programme?


Sujet :

C

Vue hybride

gronaze pourquoi un free plante le... 20/03/2006, 15h49
fearyourself Re: pourquoi un free plante... 20/03/2006, 15h52
Neitsa Bonjour, Qu'est ce qui... 20/03/2006, 15h54
gronaze ok voici une partie de mon... 20/03/2006, 15h58
Matthieu Brucher Et ce bout de code là plante... 20/03/2006, 16h09
GyZmoO Salut! Une petite... 20/03/2006, 16h10
fearyourself Pour aider, il faudrait le... 20/03/2006, 16h10
gronaze eeeuh, oui c'est vrai ça... 20/03/2006, 16h18
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut pourquoi un free plante le programme?
    hello,

    Dans mon programme je fais pas mal de malloc, et lorsque je fais des free (en plein milieu du prog), ça plante ??? pourquoi, devrais-je faire des calloc ou autre chose ?

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut Re: pourquoi un free plante le programme?
    Citation Envoyé par gronaze
    hello,

    Dans mon programme je fais pas mal de malloc, et lorsque je fais des free (en plein milieu du prog), ça plante ??? pourquoi, devrais-je faire des calloc ou autre chose ?
    Sans voir le code, c'est difficile à répondre...

    Par contre, montre un code minimal, compilable qui expose le problème.

    Jc

  3. #3
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Bonjour,

    je fais pas mal de malloc, et lorsque je fais des free
    Qu'est ce qui est utilisé pour allouer dynamiquement de la mémoire si il n'y a pas de malloc() ? calloc() ?

    Un petit bout de code ne serait pas de trop

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut
    ok voici une partie de mon code:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    int main ()
    {
    	int intermediaire, NW;
    	int tailles[5];
    	int k;
    	int i,longueur_donnees, j;
    	char phrase_init[20736];
    	int *avant;
    	unsigned int *phrase;
    	unsigned char  *image_finale, *image_finaleF, *image;
    	int **blocT;
    	int *info;
    	char nom[10] = "toto.tiff";
    	bloc bc;
     
    	printf("rentrer le texte à transformer en datamatrix\n");
    	fgets(phrase_init, sizeof phrase_init, stdin); 
    	longueur_donnees = strlen(phrase_init) - 1;
     
    	phrase = (unsigned int *) malloc (sizeof(unsigned int) * longueur_donnees);
    	if (phrase == NULL) 
    		{
    		    fprintf(stderr,"Allocation phrase impossible \n");
    			 exit(EXIT_FAILURE);
    		}
    	for (i = 0;i < longueur_donnees;i++) 
    	{ 
    		phrase[i] = (unsigned char) phrase_init[i];	//on transcrit notre texte en valeurs ASCII
    	} 
     
    	//free(phrase);
    ici lorsque free(phrase) n'est pas mit en commentaire, le programme bug!!

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Et ce bout de code là plante quand tu décommentes le free à la fin ?
    Si oui, taille encore dans ton code, ôte des bouts qui ne vont pas.
    Le débuggeur t'indique que c'est quel free qui plante ?

  6. #6
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Salut!

    Une petite question, est ce que tu essayes de libérer des zones qui ont déja été préalablement libérées avec un free?
    Si oui c'est normal que ca plante, si tu tentes de faire plusieurs free sur une zone déja libérée ca plante ..

    Bon courage

  7. #7
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Pour aider, il faudrait le code qui pose problème, donc un code compilable, voici ce que j'obtiens...

    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
    19
    20
    21
    free.c: In function 'main':
    free.c:14: error: 'bloc' undeclared (first use in this function)
    free.c:14: error: (Each undeclared identifier is reported only once
    free.c:14: error: for each function it appears in.)
    free.c:14: error: syntax error before 'bc'
    free.c:16: warning: implicit declaration of function 'printf'
    free.c:16: warning: incompatible implicit declaration of built-in function 'printf'
    free.c:17: warning: implicit declaration of function 'fgets'
    free.c:17: error: 'stdin' undeclared (first use in this function)
    free.c:18: warning: implicit declaration of function 'strlen'
    free.c:18: warning: incompatible implicit declaration of built-in function 'strlen'
    free.c:20: warning: implicit declaration of function 'malloc'
    free.c:20: warning: incompatible implicit declaration of built-in function 'malloc'
    free.c:21: error: 'NULL' undeclared (first use in this function)
    free.c:23: warning: implicit declaration of function 'fprintf'
    free.c:23: warning: incompatible implicit declaration of built-in function 'fprintf'
    free.c:23: error: 'stderr' undeclared (first use in this function)
    free.c:24: warning: implicit declaration of function 'exit'
    free.c:24: warning: incompatible implicit declaration of built-in function 'exit'
    free.c:24: error: 'EXIT_FAILURE' undeclared (first use in this function)
    free.c:29: error: syntax error at end of input
    Ensuite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     phrase = (unsigned int *) malloc (sizeof(unsigned int) * longueur_donnees);
    On ne fait pas de cast du résultat du malloc.

    Et finalement, si je complète ton code pour qu'il soit compilable et que je fasse un free de ton pointeur phrase, le programme fonctionne...

    Jc

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut
    eeeuh, oui c'est vrai ça marche!!
    désolé... et merci tout le monde

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

Discussions similaires

  1. Pourquoi pas un langage du programmation en francais
    Par katebe dans le forum Débuter
    Réponses: 5
    Dernier message: 07/01/2008, 22h50
  2. [Conception] Pourquoi ce code plante ?
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/10/2007, 10h52
  3. Réponses: 8
    Dernier message: 14/06/2007, 10h39
  4. pourquoi ce prog plante ?
    Par stokastik dans le forum C
    Réponses: 10
    Dernier message: 22/08/2006, 12h07
  5. [WiFi] pourquoi mon routeur plante en P2P ?
    Par Magnus dans le forum Hardware
    Réponses: 12
    Dernier message: 19/02/2006, 14h59

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