Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec munmap_chunk(): invalid pointer

Problème avec le free de tmp

    31 octobre 2019 à 22:54:53

    Bonjour,

    Je suis en train de developper un petit projet pour l'école,

    il y a une erreur que je n'arrive pas trop a comprendre,

    j'ai créé une fonction pour faire un strcat mais avec un double pointeur, quand j'essaie de free tmp, il y a l'erreur : "munmap_chunk(): invalid pointer"

    mais si je place le free avant le my_strcat cela fonctionne bien malgré la compilation avec GCC 9 ou Clang 9...

    Le my_strcat_ptr.c qui fonctionne :

    void my_strcat_ptr(char **str, char *c)
    {
        char *tmp = NULL;
        tmp = my_strdup(str[0]);
        free(str[0]);
        str[0] = malloc(sizeof(my_strllen(tmp) + my_strllen(c) + 3));
        my_strcpy(str[0], tmp);
        free(tmp);
        my_strcat(str[0], c);
    }

    Le my_strcat_ptr.c qui qui ne fonctionne pas :

    void my_strcat_ptr(char **str, char *c)
    {
        char *tmp = NULL;
        tmp = my_strdup(str[0]);
        free(str[0]);
        str[0] = malloc(sizeof(char) * (my_strllen(tmp) + my_strllen(c))+ 3);
        my_strcpy(str[0], tmp);
        my_strcat(str[0], c);
        free(tmp);
    }

    le my_strdup.c

    char *my_strdup(char const *src)
    {
        char *str = NULL;
        str = (char *)malloc(sizeof(char) * (my_strllen(src) + 1));
        str = my_strcpy(str, src);
    
        if (str == NULL)
            return NULL;
        return str;
    }
    

    Le my_strcpy.c :

    char *my_strcpy(char *dest, char const *src)
    {
        unsigned long long i = 0;
    
        while (src[i] != '\0') {
            dest[i] = src[i];
            i++;
        }
        dest[i] = '\0';
        return dest;
    }

    Le my_strcat.c

    char *my_strcat(char *dest, char const *src)
    {
        long long size = 0;
        while (dest[size] != '\0')
            size++;
    
        long long i = 0;
        while (src[i] != '\0') {
            dest[size + i] = src[i];
            i++;
        }
        dest[size + i] = '\0';
        return dest;
    }

    Le my_strllen.c

    unsigned long long my_strllen(char const *str)
    {
        if (str == NULL)
            return (0);
        long long i = 0;
        while (str[i] != '\0')
            i++;
        return (i);
    }


    et le test avec criterion :

    Test(my_strcat_ptr, simple_2)
    {
        char *str1 = my_strdup("Bonjour, il est ");
        char *str2 = "20h57, nous sommes le 31 octobre";
        char *str_exp = "Bonjour, il est 20h57, nous sommes le 31 octobre";
        my_strcat_ptr(&str1, str2);
        cr_assert_str_eq(str1, str_exp, "The result was %s. Expected %s", str1, str_exp);
        free(str1);
    }



    J'ai testé avec les flags -Og et -g3.

    Pas de memory leak ou d'overflow selon valgrind

    -
    Edité par Bensuperpc 1 novembre 2019 à 15:13:49

    • Partager sur Facebook
    • Partager sur Twitter

    Problème avec munmap_chunk(): invalid pointer

    × 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