Как обойти проблему с munmap_chunk(): invalid pointer
Не понятно как обойти проблему с munmap_chunk(): invalid pointer
Логика программы: Запрашиваем память под длинный текст, затем читаем каждый символ в буфер, после чего даем пользователю ввести символ, чтобы сравнить введенный символ и первый символ из буфера main_text, далее инкремент на следующий элемент. Так как русский текст и русские введенные символы - используются wide characters
int main(void)
{
wchar_t *main_text = malloc(2048 * sizeof(wchar_t *));
if (main_text == NULL)
abort()
generate_text(main_text); /* Заполним буфер текстом */
display_text(main_text); /* Выводим на экран полный текст - TUI */
input_text(main_text); /* Пользователь начинает вводить текст, сравнение */
}
Затем передаем функции generate_text указатель main_text чтобы записать туда текст
void generate_text(wchar_t *main_text, char *file_name ...)
{
/* Открыли file_name */
/* и читаем символ за символом в main_text */
for (int i = 0; (c = fgetwc(stream)) != WEOF; i++) {
if (c == '#') { /* Нужный текст всегда заканчивается символов # */
main_text[i] = '\0';
break;
}
main_text[i] = c;
}
fclose(stream);
}
Затем передаем в функцию input_text указатель main_text. Здесь будет цикл, нужно будет пройтись по всему тексту, и символ за символом сравнивать введенные данные
void input_text(wchar_t *main_text)
{
while (*main_text != '\0') {
if (*main_text == input_wchar) {
/* Проверили первый символ, идем дальше */
main_text++
}
}
/* После всех действий, которые заканчиваются в функции input_text
Надо освободить память, которую я запрашивал в функции `main`
и здесь появляется ошибка munmap_chunk()
Я понимаю что адрес указателя изменяется из-за `main_text++`,
наверное из-за этого и происходит ошибка, но как мне освободить
запрошенную память? или не стоит этого делать? */
free(main_text);
}
Я пытался писать как-то так:
wchar_t *t = main_text;
while (*t != '\0') {
/* Поехали */
}
free(main_text); /* Такая же проблема */
Полный код: https://github.com/karaname/typp/blob/master/src/main.c
Функции называются так же. Заметил, что если сделать free перед циклом while и выйти из программы, ошибок не будет. Подскажите пожалуйста как обойти эту проблему