-1
#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);
}
我觉得我在这个code.I的释放一部分未能了解到,我应该释放elemenets第一则整个数组但是这个代码没有按我可能错了解到way.Anyways给出错误信息,但是在从txt获取所有学生列表后,有时会崩溃。所有的解放出来的结构数组,它拥有字符指针
为了我的辩护,我宣布主要文件输入,因为我记得懒惰业余使用为我上次作业工作。你知道他们说什么 “如果它的工作,不要修复它”。虽然我会小心获得更专业的方法。 对于释放我分配(至少我试图)student_list->列表elemenets通过部分; student_list-> list [i] .name =(char *)malloc(15); student_list->列表[I] .lastname =(字符*)malloc的(15); 你告诉我already.Do你告诉它,因为我在函数定义分配的,因为他们将反正走了,他们不是在堆中分配或我辜负了他们在所有分配? – 2013-03-20 17:18:33
无论如何他们将会消失,此时你并没有失败。你将它们分配给堆栈。看看这个更好地理解它。 http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap – akristmann 2013-03-21 07:36:04