STUDENT ** list=NULL;
char *getid;
getid =(char*)malloc(sizeof(char) * 8);
printf("How many student? ");
int menuNum,num=0;
scanf("%d",&num);
list=(STUDENT**)malloc(num*sizeof(STUDENT*));
我这样使用指针。
正如我从教授那里学到的,在完成代码之前,我应该使用free()函数再次检索分配的内存。
这就是我想问你的。
我了解到,如果我想对(char * getid)使用free()
我知道我应该写
free(getid);
那我该如何免费使用
STUDENT ** list = NULL ; // **It's about struct**
我应该像
free(list);
要么
free(*list);
我认为前者是正确的,但是当我像后者那样书写时,我的X代码没有错误。
你能告诉我一下吗?
最佳答案
您应该使用:
free(list);
但是当我像free(* list);这样写时,我的X代码没有错误
这就是
*list
不取消分配任何内容的原因,因为那里没有任何分配。但是,由于不释放名为list
的双指针指向的内存,因此程序会遭受内存泄漏。但是,您只是(不幸)没有看到程序崩溃。如果使用Valgrind,则会看到内存泄漏。
我应该立即编写malloc并编写free()吗?不是在行尾吗?
不会。您首先使用
malloc()
动态分配内存,然后使用该内存(初始化,访问等),并且在不再需要该内存时,才使用free()
释放它。但是,如果您已经为
list[i]
动态分配了空间,则应该执行以下操作:free(list[i]);
free(list);
顺序很重要,因为您不想纠结!
也许我在动态分配2D数组上的example对此更具解释性,即使它的数据结构与列表不同。
PS:我们don't cast what malloc returns。