求助!!!释放结构体的指针成员
时间:2011-12-15
来源:互联网
有如下结构体定义
C/C++ code
现在我用一个接口去填充这个结构体,输入是对应结构体成员的字符串,接口实现如下:
C/C++ code
到这步都没有问题,当我要释放结构体中这些指针成员的时候free()出错了。释放代码如下
C/C++ code
我是个新手,高手们帮我看看错在哪里啊?谢谢了
C/C++ code
struct node { char *time; char *protocol; char *port; char *ip; char *interface; char *macaddr; struct node *next; }; typedef struct node *Node; typedef Node LIST; int node_size = sizeof(struct node) - sizeof(void *);
现在我用一个接口去填充这个结构体,输入是对应结构体成员的字符串,接口实现如下:
C/C++ code
int get_next_field(const char *ostr, char symbol1, char symbol2, char *sfield) { if (!ostr || !sfield) return -1; char *pos; if (!(pos = strchr(ostr, symbol1)) && !(pos = strchr(ostr, symbol2))) return -1; memcpy(sfield, ostr, pos - ostr); return pos - ostr + 1; } int fill_in_node(const char *ostr, char divflag, char endflag, Node P) { int curpos, parsed, cur_offset; char *ori_pos; curpos = parsed = cur_offset = 0; ori_pos = (char *)P; for(; cur_offset < node_size; cur_offset += sizeof(char *)) { char *tmp; if (!(tmp = (char *)malloc(32))) return -1; memset(tmp, 0, 32); parsed = get_next_field(ostr + curpos, divflag, endflag, tmp); memcpy(ori_pos + cur_offset, &tmp, sizeof(char *)); curpos += parsed; } return curpos; }
到这步都没有问题,当我要释放结构体中这些指针成员的时候free()出错了。释放代码如下
C/C++ code
void free_node(Node p) { int offset; char *ori_pos; ori_pos = (char *)p; for (offset = 0; offset < node_size; offset += sizeof(char *)) { free(ori_pos + offset); } } void free_list(LIST L) { Node p, q; p = L; while (p) { q = p->next; free_node(p); p = q; } }
我是个新手,高手们帮我看看错在哪里啊?谢谢了
作者: qiuhui00 发布时间: 2011-12-15
补充:出错的地方是在free_node()
作者: qiuhui00 发布时间: 2011-12-15
[code=C/C++][/code]void free_node(Node p)
{
int offset;
char *ori_pos;
ori_pos = (char *)p;
for (offset = 0; offset < node_size; offset += sizeof(char *)) {
free(ori_pos + offset);//当offset=0时就把你的node给整个释放了
}
}
你要释放结构体中的指针就指针指向他一个一个的释放如free(p->time);弄个for循环容易出错不说,看起来还不舒服
{
int offset;
char *ori_pos;
ori_pos = (char *)p;
for (offset = 0; offset < node_size; offset += sizeof(char *)) {
free(ori_pos + offset);//当offset=0时就把你的node给整个释放了
}
}
你要释放结构体中的指针就指针指向他一个一个的释放如free(p->time);弄个for循环容易出错不说,看起来还不舒服
作者: WYJXHL97 发布时间: 2011-12-15
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28