в strct->name?
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char *name;
} test;
void name_struct(test *strct, char *name)
{
strct->name = name;
}
int main(void)
{
test *strct;
strct = (test *) malloc(sizeof(test));
name_struct(strct, "Billy\0");
printf("%s\n", strct->name);
free(strct->name);
return 0;
}
В данном случае надо освободить только strct. Поле name же во free передавать нельзя, получите ошибку почти наверняка
Да, там происходит ошибка, но, вроде, удаляется только сама структура, а name - нет
Ошибка та будет, но как-то надо это поле освободить) Оставить в куче нельзя https://wandbox.org/permlink/JGItGfjJ6pkHlggq
Повторю еще раз, вдруг не понял - не надо освобождать память для поля name
Он жалуется что он передаёт ссылку на строку в структуру, но строка типо выживает
Освобождать с помощью free надо только ту память, которую ты аллоцировал. Погугли, что такое строковый литерал, и ты поймешь, что он вшивается в бинарник программы, а не аллоцируется, значит и освобождать его не надо (более того - нельзя из-за падений)
Обсуждают сегодня