Я создаю функцию 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);
}