Утечка памяти - Valgrind - «0 байт потеряно в 59 блоках» - PullRequest
1 голос
/ 09 ноября 2019

Valgrind говорит, что у меня утечка памяти 59 байтов в 59 блоках из-за моей функции ft_strdup:

char            *ft_strdup(const char *s)
{
    char    *dup;
    int     i;

    i = 0;
    dup = (char *)malloc((ft_strlen(s) + 1) * sizeof(char));
    if (!dup)
        return (NULL);
    while (s[i])
    {
        dup[i] = s[i];
        i++;
    }
    dup[i] = '\0';
    return (dup);
}

Но когда я изменяю размер выделения на:

dup = (char *)malloc(ft_strlen(s) * sizeof(char));

Valgrind показывает мне этот результат:

==36929==    definitely lost: 0 bytes in 59 blocks
==36929==    indirectly lost: 0 bytes in 0 blocks

Почему 59 блоков по-прежнему отображаются вместо 0 блоков, так как не потеряно ни одного байта?

1 Ответ

0 голосов
/ 09 ноября 2019

Когда вы меняете размер выделения на:

dup = (char *)malloc(ft_strlen(s) * sizeof(char));

, вы перезаписываете память, которую вы не распределили, символом завершения \0, что в значительной степени является источником вашей проблемы. .

Согласитесь, Вальгринд мог бы дать лучшую диагностику, но мог бы и хуже.

...