内存泄漏-Valgrind-“ 59个块中丢失了0个字节”

Valgrind说由于函数ft_strdup,我在59个块中有59个字节的内存泄漏:

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个块?

heishashengzhe1 回答:内存泄漏-Valgrind-“ 59个块中丢失了0个字节”

将分配大小更改为:

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

您正在用终止符\0覆盖尚未分配的内存,这几乎是问题的根源。

同意,valgrind可以提供更好的诊断,但也可以提供更差的诊断。

本文链接:https://www.f2er.com/3132294.html

大家都在问