内存泄漏 - Valgrind - “59 个块中丢失 0 个字节”
Memory Leak - Valgrind - "0 bytes lost in 59 blocks"
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] = '[=10=]';
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 个块?
当您将分配大小更改为:
dup = (char *)malloc(ft_strlen(s) * sizeof(char));
您正在用终止符 [=11=]
覆盖未分配的内存,这几乎是问题的根源。
同意,valgrind 可以提供更好的诊断,但也可以提供更差的诊断。
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] = '[=10=]';
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 个块?
当您将分配大小更改为:
dup = (char *)malloc(ft_strlen(s) * sizeof(char));
您正在用终止符 [=11=]
覆盖未分配的内存,这几乎是问题的根源。
同意,valgrind 可以提供更好的诊断,但也可以提供更差的诊断。