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

问题描述 投票:1回答:1

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

c memory-management memory-leaks valgrind
1个回答
0
投票

将分配大小更改为:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.