首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-09-14 
请教:如何free结构体数组中成员?谢谢!// s_bloc structstruct s_bloc{char* nameint* nets}struct s_bl

请教:如何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就对了。

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

热点排行