Проблема в этом утверждении ( *person)->name = "NAME";
. Это не копирует строку "NAME"
в переменную name
. Вместо этого name
указывает на другую область памяти (а не на malloc
, указанную вами). Если вы попытаетесь free
этой памяти, вы получите неопределенное поведение. Вам нужно использовать strcpy
(или strncpy
), чтобы скопировать строку в переменную name
. В настоящее время вы делаете malloc(sizeof(4))
, что не правильно. Помните, что вам нужно выделить символы no.of + 1 символ для строк, чтобы в конце поместился символ NULL, в настоящее время вы выделили только 4 символа, что недостаточно, вам нужно выделить память для 5 символов. Так что вам нужно сделать malloc(sizeof(char)*5)
.