我有一个结构,我用来建立一个链表如下;分配最近释放的内存
struct my_struct{
char a[16];
struct my_struct *next;
}
我通过下面的函数释放链表;
void free_my_list(struct my_struct* recv) {
if (recv->next != NULL)
free_my_list(recv->next);
free(recv);
recv = NULL;
}
在我的计划,我使用结构_my_list
一遍又一遍,但自由如下每一次的malloc它:
struct my_struct *_my_list;
free_my_list(_my_list);
_my_list = (my_list *) malloc(sizeof(my_list));
_my_list->next = NULL;
我每次填充列表,我打印字符数组,然后复位_my_struct由上面的代码。 以上代码在Ubuntu pc上工作正常,但在Cent OS上正确打印第一个列表(在第一个malloc _my_struct之后)后,列表被打印为损坏的数据。
当我在整个程序执行过程中没有释放和malloc内存时,它在Cent OS中也可以正常工作,但我应该在printf()
调用之间重置列表_my_list
。
_my_list通过以下函数进行填充和打印;
/*prints every item in my_list*/
void print_my_list(struct my_struct *recv, FILE *fd) {
my_list *tmp;
tmp = recv;
while (tmp != NULL) {
if (fwrite(tmp->a, 1, strlen(tmp->a), fd) == -1) {
pritnf("error\n");
}
tmp = tmp->next;
}
}
/*Add 'a' string to _my_list*/
void add_recv_to_list(struct my_struct **recv_list, char *recv) {
struct my_struct *tmp;
tmp = *recv_list;
if (*recv_list == NULL) {
*recv_list = (struct my_struct *) malloc(sizeof(struct my_struct));
tmp = *recv_list;
} else {
while ((tmp->next) != NULL) {
tmp = tmp->next;
}
tmp->next = (struct my_struct *) malloc(sizeof(struct my_struct));
tmp = tmp->next;
}
strncpy(tmp->a, recv, MAX_NAME_LEN);
tmp->next = NULL;
}
什么是可以的原因,任何想法?
我认为你需要证明填充列表的代码而且,'my_list'一个'结构my_struct' –
发布你的?完整的示例您缺少一个typedef或一些结构 –
如何填充列表。在自由列表函数中recv = NULL什么也不做。您最好传递my_struct **,以便从列表中清除列表指针该例程。 –