Я получил эту ошибку от Valgrind.Я мог бы найти решение, чтобы исправить это.Когда я пытаюсь освободить свои выделения, я получаю ошибку сегментации и эти ошибки.
> ==10096== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
==10096==
==10096== 1 errors in context 1 of 3:
==10096== Invalid write of size 1
==10096== at 0x40138C: readClientFile (client.c:39)
==10096== by 0x400C0B: main (main.c:15)
==10096== Address 0x3 is not stack'd, malloc'd or (recently) free'd
==10096==
==10096==
==10096== 1 errors in context 2 of 3:
==10096== Invalid read of size 8
==10096== at 0x401389: readClientFile (client.c:39)
==10096== by 0x400C0B: main (main.c:15)
==10096== Address 0x5203568 is 0 bytes after a block of size 40 alloc'd
==10096== at 0x4C2B9B5: calloc (vg_replace_malloc.c:711)
==10096== by 0x401304: readClientFile (client.c:29)
==10096== by 0x400C0B: main (main.c:15)
==10096==
==10096==
==10096== 1 errors in context 3 of 3:
==10096== Invalid read of size 8
==10096== at 0x401359: readClientFile (client.c:38)
==10096== by 0x400C0B: main (main.c:15)
==10096== Address 0x5203568 is 0 bytes after a block of size 40 alloc'd
==10096== at 0x4C2B9B5: calloc (vg_replace_malloc.c:711)
==10096== by 0x401304: readClientFile (client.c:29)
==10096== by 0x400C0B: main (main.c:15)
Это говорит о том, что проблема связана с моим массивом структур с двумя указателями.Соответствующие строки приведены ниже.
29. struct client** clientsArray =calloc(numberOfClients ,sizeof(struct client*));
for(i= 0 ; i<numberOfClients; i++){
clientsArray[i] = (struct client*)malloc(sizeof(struct client));
}
while(!feof(clientFP)){
38. fscanf(clientFP, "%s", clientsArray[counter]->clientID);
39. clientsArray[counter]->clientID[3]='\0';
fscanf(clientFP, "%s", clientsArray[counter]->clientIP);
clientsArray[counter]->clientIP[11]='\0';
fscanf(clientFP, "%s", clientsArray[counter]->clientMacAddress);
clientsArray[counter]->clientMacAddress[11]='\0';
counter++;
}
// Каждая строка файла имеет следующий формат: A 1.2.3.4 AAAAAAAAAA
МОЙ КОД ДЛЯ МАРКИРОВКИ БЕСПЛАТНЫХ КЛИЕНТОВ;
Сначала я освободил переменные каждого объекта клиента.И тогда я использовал это.
for(i = 0 ; i<numberOfClients ; i++){
free(clients[i]);
}
free(clients);
Can you please help me about what to change?