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 :

probleme avec malloc et realloc


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 7
    Points : 7
    Points
    7
    Par défaut probleme avec malloc et realloc
    Bonjour, j'ai voulu declarer deux tableau dynamique de char ( chaine de caractere) dont je ne sais pas la taille j'ai procédé de la facon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char* chaine;
    char* chaine1;
    et j'ai inséré dans une boucle while le coe suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (k==0) chaine= malloc (sizeof(char));
    else chaine = realloc (chaine,sizeof(chaine)+sizeof(char));
    chaine[k]=chain[i];  k++;
    if (l==0) chaine1= malloc (sizeof(char));
    else chaine1 = realloc (chaine1,sizeof(chaine1)+sizeof(char));
    chaine1[l]=chain[i]; l++;
    mé lors de la compilation une erreur de ce type surgit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    projet1(6875) malloc: *** error for object 0x100554: incorrect checksum for freed object - object was probably modified after being freed.
    *** set a breakpoint in malloc_error_break to debug
    projet1(6875) malloc: *** error for object 0x100564: incorrect checksum for freed object - object was probably modified after being freed.
    *** set a breakpoint in malloc_error_break to debug
    projet1(6875) malloc: *** error for object 0x100574: incorrect checksum for freed object - object was probably modified after being freed.
    *** set a breakpoint in malloc_error_break to debug
    projet1(6875) malloc: *** error for object 0x100570: incorrect checksum for freed object - object was probably modified after being freed.
    *** set a breakpoint in malloc_error_break to debug
    alors j'étais sur qu'il y a un probleme avec l'allocation que j'ai fait
    merci de me repondre

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Il y a deux problèmes dans l'utilisation de realloc :
    • sizeof(chaine) retourne la taille du pointeur (qui est donc la même à chaque appel), pas la taille allouée. Ainsi realloc va systématiquement allouer la même chose. Ton erreur vient probablement de là : tu alloues moins que ce que tu penses et tu vas ensuite écrire en dehors de la zone allouée.
    • Pour utiliser correctement realloc, il ne faut pas directement récupérer la valeur de retour dans le pointeur final. En effet, en cas d'erreur realloc retourne NULL, ici tu aurais donc le pointeur chaine qui vaut NULL et plus aucun lien sur la mémoire précédemment allouée qui ne pourrait donc pas être libérée ==> fuite mémoire.


    Sinon deux petites remarques complémentaires:
    • Il est possible d'utiliser realloc(NULL, ...) qui se comporte alors comme malloc (ce qui devrait te permettre de simplifier ton code).
    • Il est très inefficace de réallouer un octet de plus à chaque fois. Sauf contrainte très particulière, on préfère faire croître la zone allouée de manière plus importante à chaque realloc() et faire appel à realloc() moins fréquemment. Quitte à réduire au strict nécessaire en fin de traitement.

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci bcp de ta reponse elle m'a beaucoup aidé surtout le sizeof(chaine) qui retourne la taille du pointeur et non la taille du contenu.

Discussions similaires

  1. Probleme avec malloc sur tableau de chaine
    Par grex1 dans le forum C
    Réponses: 2
    Dernier message: 12/09/2010, 22h36
  2. probleme avec malloc
    Par coyotemk dans le forum Débuter
    Réponses: 5
    Dernier message: 20/12/2009, 21h34
  3. probleme avec malloc
    Par Hisoka_Hunter dans le forum C
    Réponses: 4
    Dernier message: 14/01/2009, 08h43
  4. Probleme avec la fonction realloc() !
    Par djskynet dans le forum C
    Réponses: 2
    Dernier message: 01/03/2008, 21h45
  5. Probleme avec malloc
    Par boula dans le forum C
    Réponses: 6
    Dernier message: 03/07/2007, 09h36

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