Я использую Valgrind в linux, чтобы проверить утечку памяти в c, но я не обнаружил, что это утечка в моей функции «join» - PullRequest
0 голосов
/ 21 июня 2020

Я создаю функцию Join, которая возвращает строку, которая является объединением двух символьных строк. Когда я использую Valgrind в своей программе, у меня возникает утечка mallo c путем соединения, но я не могу найти, где утечка в коде.

Если кто-нибудь может мне помочь

    char        *join(char *s1, char *s2, int *s_s1, int s_s2)
{
    int     i;
    int     j;
    char    *str;

    if (!s1 || !s2)
        return (NULL);
    if (!(str = malloc((*s_s1 + s_s2 + 1) * sizeof(char))))
        return (NULL);
    i = -1;
    while (++i < *s_s1)
        str[i] = s1[i];
    j = i;
    i = -1;
    while (++i < s_s2)
        str[j + i] = s2[i];
    *s_s1 += s_s2;
    str[j + i] = '\0';
    free(s1);
    return (str);
}

int get_next_line(int fd, char **line)
{
    static  t_getnl b[256];
    char            *tmp;

    if (fd < 0 || !line || BUFFER_SIZE <= 0 || read(fd, b[fd].s, 0) == -1)
        return (-1);
    inite_base(&b[fd], line);
    if (b[fd].i == 0 && (b[fd].tmp = gread(fd, &b[fd], line)) <= 0)
        return (b[fd].tmp);
    while (1)
    {
        if ((b[Z].tmp = gwasread(b[Z].s + b[Z].i, b[Z].l - b[Z].i)) < 0)
            *line = join(*line, b[Z].s + b[Z].i, &b[Z].ll, b[Z].l - b[Z].i);
        else
        {
            tmp = ft_subbstr(b[fd].s + b[fd].i, 0, b[fd].tmp);
            *line = join(*line, tmp, &b[fd].ll, b[fd].tmp);
            free(tmp);
        }
        b[fd].i = ((b[fd].tmp < 0) ? 0 : b[fd].i + b[fd].tmp + 1);
        if (b[fd].tmp >= 0)
            break ;
        if ((b[fd].tmp = gread(fd, &b[fd], line)) <= 0)
            return (b[fd].tmp);
    }
    return (1);
}
...