@newmersedez

Почему после очистки строки программа падает?

Не могу понять, в чем заключается ошибка. Программа на данном этапе обрабатывает строки из файла. Дан файл, содержащий в себе инструкции вида:
prior=0 task='Task 1'
prior=0 task='Task 3'
prior=2 task='Task 4'
prior=2 task='Task 5'


Я считываю в переменную temp значение prior, а в строку msg_buf строку, содержащуюся в ' ';
Память под строку выделяю правильно, в конце строки добавляю '\0', но после выполнения функции free(msg_buf) программа падает.... Почему так происходит? Вот код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "message.h"

void    message_processing(FILE *file)
{
    int         i, j;
    int         temp = 0, size = 0;
    char        str_buf[BUFSIZ] = {0};
    char        *msg_buf = NULL;
    Message     message;

    while(!feof(file))
    {
        fgets(str_buf, sizeof(str_buf), file);
        strtok(str_buf, "\n");
        i = 6;
        while(isdigit(str_buf[i]))
        {
            temp = temp * 10 + (str_buf[i++] - '0');
        }
        i += 7;
        for(; i < strlen(str_buf) - 1; i++)
        {
            //printf("%c", str_buf[i]);
            msg_buf = (char *)realloc(msg_buf, ++size * sizeof(char) + 1);
            msg_buf[size - 1] = str_buf[i];   
        }
        msg_buf[size] = '\0';
        printf("%s\n", msg_buf);
        free(msg_buf);
    }
}
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Вы очищаете msg_buf в цикле же. На второй итерации у вас msg_buf уже очищен и вы его передаете в realloc и все падает.

Попробуйте после free присвоить msg_buf = NULL.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы