Посимвольный ввод строки с динамическим выделением памяти

Необходимо ввести строку посимвольно и выполнить несколько проверок. Проблема в том, что при вводе символов со строкой происходит какая-то дичь, более того, при вводе 6-го символа выводится ошибка "corrupted size vs. prev_size". Подскажите, пожалуйста, в чем проблема. Спасибо!

Код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int get_len(char *string){
  int i = 0;
  while(string[i]!='\0'){
    i++;
  }
  return i;
}

char* del_spaces(char *str){
  int i,k;
  for (i = 0; str[i] != '\0'; i++)
    if (str[i]==' ' || str[i]=='.' || str[i]=='!' || str[i]=='?'){
      for (k = i; str[k] != '\0'; k++) str[k] = str[k+1]; 
      i--;
 }
 return str;
}

int is_palin(char *string){
  int k = get_len(string);
  int i;

  for(i=0; i<=k/2; i++){
    if(!(string[i]==string[k-i-1])){
      return 0;
    }
  }
  return 1;
}


int main(void) {
  int length,error,i,check, word_size, num_words, is_space;
  word_size = num_words = 0;
  length = 1;
  char *string, sym;
  char *value=NULL;
  if(!(string = (char*)malloc(length * sizeof(char)))) printf("NullPointer");

  while(1){
    printf("\nВведите cимвол (для окончания ввода введите ./!/? ): ");

    sym=getchar();
    if (!((( sym>= 'a' || sym >= 'A') && (sym <= 'z'|| sym <= 'Z')) || sym==' ' || sym=='?' || sym=='!' || sym=='.' )) {printf("Неизвестный символ. Программа остановена"); return 0;}
    while(getchar()!='\n');
    length++;
    if(!(string = (char*)realloc(string, sizeof(char)*(strlen(string)+1)))) printf("NullPointer");
    
    is_space = 0;

    if(sym == ' ') is_space=1;

    if(sym == '.' || sym == '?' || sym == '!'){printf("\nВвод строки завершен");  break;}

    

    if(is_space){
      num_words++;
      word_size=0;
    } else {word_size++;}
    
    if(num_words>30 || word_size>20){printf("\nПревышен размер предложения. Программа остановлена"); return 0;}

    strcat(string, &sym);
    printf("\n%s", string);
  }
  string = del_spaces(string);
  
  if(is_palin(string)){
    printf("\nПалиндром: True");
  } else {
    printf("\nПалиндром: False");
  }

  return 0;
}

Консоль:

введите сюда описание изображения


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