读书人

请问:怎么free结构体数组中成员?多谢

发布时间: 2012-09-14 11:53:44 作者: rapoo

请教:如何free结构体数组中成员?谢谢!

// s_bloc struct
struct s_bloc{
char* name;
int* nets;
};

struct s_bloc* bloc;

bloc = (struct s_bloc *) malloc(100 * sizeof(struct s_bloc));


如果我想free bloc[3]我改怎么做?谢谢

free(bloc[3].name);
free(bloc[3].nets);
free(bloc[3]);
这样对吗?


[解决办法]
下面只是分配了结构体所需要的内存:
bloc = (struct s_bloc *) malloc(100 * sizeof(struct s_bloc));

如果想该结构体能够使用,还需要对name和nets赋值,该赋值可以使用已存在的变量,也可以使用动态分配的变量,如果是动态分配的变量,则需要释放,否则不需要。
释放内存的方法:free(bloc[3].name,等等
[解决办法]
不能那样做~
统一申请的,只能统一释放,不可能释放其中的某一个~
free(bloc);//将所有的释放
[解决办法]
这样不对,要想单独释放某个元素你应该这样写

struct s_bloc** bloc;

bloc = (struct s_bloc **) malloc(100 * sizeof(struct s_bloc*));

for(int i=0;i<100;i++)
{
bloc[i] = (struct s_bloc *) malloc(100 * sizeof(struct s_bloc));
}
....

这样你写的free就对了。
[解决办法]
// s_bloc struct
struct s_bloc{
char* name;
int* nets;
};

struct s_bloc* bloc;
bloc = (struct s_bloc *) malloc(100 * sizeof(struct s_bloc));

你这样只是申请了100个s_bloc的空间,它只包括两个指针(你定义的),你还要为每个s_bloc的name和nets分别申请空间才行的。
free的时候也要分别为每个s_bloc释放name和nets,
就像
free(bloc[3].name);
free(bloc[3].nets);
最后释放bloc时,只要用一次free(bloc)就行了,不用每个都去释放
[解决办法]

探讨
这样不对,要想单独释放某个元素你应该这样写

struct s_bloc** bloc;

bloc = (struct s_bloc **) malloc(100 * sizeof(struct s_bloc*));

for(int i=0;i <100;i++)
{
bloc[i] = (struct s_bloc *) malloc(100 * sizeof(struct s_bloc));
}
....

这样你写的free就对了。

[解决办法]
楼主可以看一下操作系统内存管理方面的资料
帮顶了。
[解决办法]
申请的什么,释放什么;
一次申请,一次释放;
分别申请,分别释放;
怎么来的,就怎么去。

读书人网 >C语言

热点推荐