Вы пытаетесь освободить постоянную память с помощью:
free(s); // cannot free constant "heel"
То, что вы делаете, - это выделение фрагмента памяти и сохранение его местоположения (char *s
).Затем вы перезаписываете эту ссылку единицей на строковую константу «пятка» (утечка памяти), которая не может быть free
d.Чтобы сделать это так, как вам нужно, вы должны скопировать константную строку в выделенную память:
strcpy(s, "heel");
Вот пример получения пользовательского ввода:
char *input = malloc(sizeof(char) * 16); // enough space for 15 characters + '\0'
fgets(input, 16, stdin);
// do something with input
free(input);