Я создаю общий связанный список. Данные в список загружаются из файла .txt (функция loadClients). Проблема в том, что когда я помещаю второй элемент в список (функция push_back), malloc () иногда не работает, и у меня возникает ошибка 0xC0000005. Например, я запускаю программу 10 раз, и она работает хорошо, но в 11-й раз у меня появляется ошибка. Я даже не могу проверить, что возвращает malloc ().
Вот структура клиента:
typedef struct client
{
int card_no;
char last_name[30];
char first_name[30];
int phone_no;
char email[60];
char login[18];
char password[20];
bool admin;
}client_struct;
Вот общий список:
typedef struct List
{
void *data;
struct List *next;
}List;
Вот функция push_back:
void push_back(List **head,void *data,size_t size)
{
if(*head==NULL)
{
*head = (List *)malloc(sizeof(List));
(*head)->data = malloc(size);
(*head)->data = data;
(*head)->next = NULL;
}else
{
List *current = *head;
while(current->next != NULL)
current = current->next;
printf("PUSH BACK1!\n");
current->next = (List *)malloc(sizeof(List)); //HERE IS THE PROBLEM
printf("PUSH BACK2!\n");
current->next->data = malloc(size);
current->next->data = data;
current->next->next = NULL;
}
}
Вот функция loadClients. Эта функция возвращает указатель на созданный список.
List *loadClients()
{
List *client_head = NULL;
FILE *users = fopen("users.txt","r");
if(users == NULL)
return NULL;
while(!feof(users))
{
client_struct *cl = malloc(sizeof(client_struct));
memset(cl,0,sizeof(client_struct));
char tab[200];
memset(tab,0,200);
fgets(tab,200,users);
sscanf(tab,"%d %s %s %d %s %s %s %d",
&cl->card_no,cl->last_name,cl->first_name,&cl->phone_no,
cl->email,cl->login,cl->password,&cl->admin);
printf("ADD\n");
if(cl->card_no != 0)
push_back(&client_head,(client_struct *)cl,sizeof(client_struct));
}
fclose(users);
return client_head;
}
Как я могу исправить эту проблему?