Основная проблема, которую я вижу, заключается в том, что в вашем коде для функции Input()
, length
- это локальная переменная с автоматической продолжительностью хранения, которая не инициализируется явно.Таким образом, он содержит неопределенное значение.Таким образом, оператор
buffer[length] = user_input;
обращается к неверному адресу памяти.Это вызывает неопределенное поведение .
. Вы должны явно инициализировать length
в 0
.
После этого знайте, что getchar()
возвращаетint
, а значение типа EOF
не может вписаться в char
.Вам необходимо изменить user_input
на int
.
Кроме того, в main()
вы определили input
как указатель,
char* input = Input();
, но высравнивая его со значением int
, скорее всего, это не то, что вам нужно.
Вы должны сравнивать со значением, хранящимся в указателе, что-то вроде
if (*input == 1)
return 1;
if (*input == 2)
return 2;
и, наконец,Вы передаете указатель на free()
, а не содержимое, поэтому измените
free(*input);
на
free(input);