Segmentation fault (core dumped) при вводе относительно длинной строки

У меня есть функция создания динамического массива ввода строки, в нее я кладу &ссылку на указатель типа char. Проблема: для небольших строк длиной примерно 15 символов или около того все отлично работает, но если в строке, к примеру, 200 символов - програма падает с ошибкой Segmentation fault (core dumped)

Почему? Заранее спасибо!

int create_array(char** arr){
     char capacity = 2, tmp;
     int i = 0;
     (*arr) = (char*)malloc(sizeof(char) * capacity);
     while ( (tmp = getchar()) != '\n' && tmp != EOF ){
         *(*arr + i) = tmp;
         i++; // запись размера
         if (i == capacity){
             capacity *= 2;
             (*arr) = (char*)realloc((*arr), sizeof(char) * capacity); // расширяю массив
         }
     }
     return i; // возврат размера
} 

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

Автор решения: gbg

Глупая ошибка - у вас capacity в char хранится, доходит до 127, потом преполнение и кирдык.

→ Ссылка