Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question malloc

    24 mars 2022 à 14:15:26

    Bonjour

    en fait il y a une chose que je comprends pas, si je retire le str = get_next_line(fd) dans ma while, j'ai cette erreur, mais si je le met je récupère bien mes lignes :

    malloc: error for object 0x150704860: pointer being freed was not allocated

    malloc: set a breakpoint in malloc_error_break to debug


    int ft_nb_line(char  *map)
    {
        char *str;
        int line;
        int fd;
    
        line = 0;
        fd = open(map, O_RDONLY);
        str = get_next_line(fd);
        while (str)
        {
            line++;
            free(str);
            str = get_next_line(fd);
        }
        close (fd);
        return (line);
    }



    merci pour votre aide

    -
    Edité par NicolasArty 24 mars 2022 à 14:15:45

    • Partager sur Facebook
    • Partager sur Twitter
      24 mars 2022 à 14:21:12

      Bonjour,

      avant le premier tour de boucle tu alloues de la mémoire pour str en l9. Ensuite au premier tour de boucle tu libères cette mémoire. Au second tour de boucle, str pointe sur un morceau de mémoire libérée et tu essayes à nouveau de libérer cette espace ⇒ erreur.

      Si en revanche tu réalloues de la mémoire et alors à chaque fois tu vas libérer un espace mémoire valide … ⇒ pas d'erreur.

      Cela vaut évidemment si get_next_line alloue de la mémoire via malloc.

      • Partager sur Facebook
      • Partager sur Twitter
        24 mars 2022 à 15:36:27

        Les règles d'or (voire de platine) à respecter :

        • à chaque malloc doit correspondre un free et un seul ;
        • ne jamais utiliser un pointeur pointant sur une zone mémoire libérée ou non allouée ;
        • si il y a eu plusieurs malloc alors les free se font en ordre inverse.
        • Partager sur Facebook
        • Partager sur Twitter

        Question malloc

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown