У меня есть структура, которую я использую для создания связанного списка, как показано ниже;
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;
}
В моей программе я использую struct _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, но в Cent OS после правильной печати первого списка (после первого malloc _my_struct) следующий список печатается как поврежденные данные.
Когда я не освобождаю и не размещаю память во время выполнения всей программы, она хорошо работает и в Cent OS, но я должен сбросить список _my_list
между printf()
вызовами.
_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;
}
В чем может быть причина, есть идеи?