Как вы указали, если вы сохраняете student s
в стеке, блок памяти освобождается, как только функция возвращается, и у вас больше нет доступа к этой информации. Такие переменные имеют то, что известно как automatic storage duration
.
Использование кучи позволяет вам явно управлять памятью и, следовательно, позволяет более гибко хранить информацию, поскольку память выделяется и освобождается по запросу. Такие переменные имеют то, что известно как allocated storage duration
.
Таким образом, для хранения вашей информации в куче вы используете динамические c функции выделения памяти, такие как malloc()
или calloc()
.
В вашем случае, чтобы использовать кучу, мы сделаем:
student* create_student(char *given_name, char *family_name, int age,
char* gender, int *promotion)
{
student *s = malloc(sizeof(student));
s->given_name = given_name;
s->family_name = family_name;
s->age = age;
strncpy(s->gender, gender, strlen(gender)+1);
s->promotion = promotion;
puts("---print inside create_student function---");
print_student(s);
puts("---end of print inside");
return s;
}
Когда вам больше не нужна память, выделенная в куче, вы должны освободить ее, используя free()
.