Как обойти проблему с 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 и выйти из программы, ошибок не будет. Подскажите пожалуйста как обойти эту проблему


Ответы (0 шт):