Конечно, вам нужно освобождать объекты кучи, независимо от того, передаете ли вы их функции или нет.Все, что возвращается malloc()
, в конечном итоге должно быть free()
d, независимо от того, как вы будете его использовать.
Ваша проблема заключается в следующем:
Следующая строка:
char* str1 = malloc(4 * sizeof (char));
выделяет память для 4 символов и сохраняет ссылку на нее в str1
.
Следующая строка:
str1 = "abc\n";
забывает любую память, на которую указывал str1
(что приводит к утечке памяти), и заставляет str1
указывать на новое местоположение в статических данных вашей программысегмент.Это память, которая никогда не выделялась и, следовательно, не может быть освобождена.
Чтобы решить вашу проблему, вместо установки str1
для указания "abc\n"
необходимо использовать strcpy()
для копирования "abc\n"
выделенному блоку памяти, на который указывает str1
.
Перед этим не забудьте увеличить 4
и 6
на 1, потому что строки в C также содержатзавершающий ноль байт, поэтому вам нужно выделить место для символов 5
и 7
соответственно.