Ваш код перевернут.
Это:
char* name="Arnold";
const char* str=(const char*)malloc(strlen(name)+1);
Должно выглядеть так:
const char* name="Arnold";
char* str=(char*)malloc(strlen(name)+1);
Тип хранения const
сообщает компилятору, что вы не собираетесь изменять блок памяти после выделения (динамически или статически). Освобождение памяти изменяет это. Обратите внимание, вам не нужно приводить возвращаемое значение malloc () , но это всего лишь отступление.
Мало пользы в динамическом выделении памяти (которую вы делаете, исходя из длины name
) и сообщении компилятору о том, что вы не собираетесь ее использовать. Обратите внимание, что с использованием означает запись чего-либо в него, а затем (необязательно) освобождение этого позже.
Приведение к другому типу хранилища не исправляет тот факт, что вы сначала изменили типы хранилищ :) Это просто выводит предупреждение, которое пыталось вам что-то сказать.
Если код перевернут (как и должно быть), free()
будет работать, как и ожидалось, поскольку вы можете изменить выделенную вами память.