У меня есть программа со следующими структурами:
typedef struct slide
{
int number;
int maxX;
int y;
int r, g, b;
struct line *first;
} slide;
typedef struct line {
char content[256]; // number subject to change
int r, g, b;
struct line *prev;
struct line *next;
} line;
Создание экземпляров этих структур выполняется с помощью следующего кода:
slide* createSlideArray(int s) {
slide* slides = malloc(sizeof(struct slide)*s);
return slides;
}
line *nextLine(line *prev) {
line *n = malloc(sizeof(line));
n->prev = prev;
prev->next = n;
return n;
}
И, наконец, вот код для освобожденияструктуры после завершения цикла программы и перед открытием нового файла:
void freeLines(line *l) {
line *next;
while(l) {
next = l->next;
free(l);
l = next;
}
}
в основном:
int i;
for (i=0;i<slideCount;i++) {
freeLines(slides[i].first); // works through next till NULL
}
free(slides);
Как видите, экземпляр структуры слайда содержит«первая» строковая структура, строковая структура представляет собой двусвязный список. Содержимое строки считывается на экран (с помощью ncurses)
Пока пользователь в цикле программы может набрать команду :open filename
, чтобы открыть новый файл, в этом моя проблема.
Эти слайды и строки должны быть освобождены. Когда цикл начинается снова, он открывает новый файл, создает слайды и строки и использует их в качестве содержимого. Содержание, однако, частично заполнено мусорным текстом. Я почти уверен, что эта проблема в структуре строк и в том, как она бесплатна. Я не вижу, что я делаю неправильно, однако.
Редактировать: я должен прояснить, что на первой итерации программы текст идеален, только когда я пытаюсь проанализировать новый файл, появляется текст мусора, и он очень однороден (появляетсяв начале каждой строки одни и те же символы)
Я нахожусь на Ubuntu, если это имеет значение.
Вот ссылка на проект: DSS