#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
int id;
char *name;
char *lastname;
} student_type;
typedef struct
{
student_type list[15];
} student_list_type;
void get_students(FILE *input,char *filename,student_list_type *student_list);
int main()
{
printf("Hello world!\n");
student_list_type std_list;
student_list_type *std_list_p=&std_list;
FILE *input;
get_students(input,"students.txt",std_list_p);
return 0;
}
void get_students(FILE *input,char *filename,student_list_type *student_list)
{
int i=0;
int j=0;
input=fopen(filename,"r");
printf("filename is %s",filename);
while(fscanf(input,"%d",&student_list->list[i].id)==1)
{
student_list->list[i].name=(char *) malloc(15);
student_list->list[i].lastname=(char *) malloc(15);
fscanf(input,"%s",student_list->list[i].name);
fscanf(input,"%s",student_list->list[i].lastname);
i++;
}
for(j=0; j<i+1; j++)
{
free(student_list->list[i].name);
free(student_list->list[i].lastname);
}
free(student_list->list);
fclose(input);
}
Я думаю, что я не могу освободить часть этого кода. Я узнал, что я должен освобождать элементы сначала, а затем весь массив, но я, возможно, узнал неправильный путь. 't давать сообщения об ошибках, но просто падает после получения всего списка учеников из txt.Освобождение массива структур, у которых есть указатели на символы
В свою защиту я объявил ввод файла в основном, так как я помню, что использование ленивого любителя работало для моей последней домашней работы. Вы знаете, что они говорят «Если это работает, не исправляйте это». Хотя я был бы осторожен чтобы получить более профессиональный подход. Для освобождения части я выделил (по крайней мере, я попробовал) student_list-> list elemenets; student_list-> list [i] .name = (char *) malloc (15); student_list-> list [i] .lastname = (char *) malloc (15); вы говорите мне, что они уже не выделены в кучу. Вы рассказываете об этом, потому что я назначил определение функции, так как они все равно уйдут или я не смог их вообще выделить? –
Они все равно уйдут, вы не потерпите неудачу в этот момент. Вы выделили их в стек. Взгляните на это, чтобы понять это лучше. http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap – akristmann