Утечка памяти проблема с malloc в C - PullRequest
0 голосов
/ 26 ноября 2018

Я относительно новичок в C и malloc.Я написал lib с базовыми функциями, которые я заполняю новыми, и я использую их для других небольших проектов, подобных этому.

Я слышал о Valgrind и решил проверить свою программу на немно не могу понять, почему у меня так много leaks, я чувствую, что все мои mallocs защищены if (line == NULL) при использовании функций, использующих malloc.

Не могли бы вы, ребята, вернуть меня назадна треках здесь?

static char *concator(char *s1, char *s2, size_t len)
{
    char    *line;
    size_t  size;

    if (!s1 || !s2)
        return (NULL);
    size = strlen(s1) + strlen(s2);
    line = (char*)memalloc(sizeof(char) * size + 1);
    if (line == NULL)
        return (NULL);
    strcpy(line, s1);
    strncat(line, s2, len);
    strdel(&s1);
    return (line);
}

int line_reader(const int fd, char **line)
{
    static char buf[BUFF_SIZE];
    char        *pos;
    int         ret;

    if (fd < 0 || !line || read(fd, buf, 0) < 0 || BUFF_SIZE < 1)
        return (-1);
    *line = strnew(0);
    if (line == NULL)
        return (-1);
    while (1)
    {
        pos = strchr(buf, '\n');
        if (pos)
        {
            *line = concator(*line, buf, pos - buf);
            if (line == NULL)
                return (-1);
            strncpy(buf, &buf[pos - buf + 1], BUFF_SIZE - (pos - buf));
            return (1);
        }
        *line = concator(*line, buf, BUFF_SIZE);
        if (line == NULL)
            return (-1);
        ret = read(fd, buf, BUFF_SIZE);
        buf[ret] = '\0';
        if (!ret)
            return ((**line) ? 1 : 0);
    }
}

1 Ответ

0 голосов
/ 26 ноября 2018

Свободно line после того, как вы закончили использовать его, например:

char* line;
int rc = line_reader(fd, &line);
if(rc > 0)
{
    //use line
    printf("%s\n", line);
    //then free it
    free(line);
} 

Это должно исправить проблемы утечки памяти, о которых сообщает valgrind.Однако следите за другими ошибками, упомянутыми в комментариях.

...