Salve ragazzi, rieccomi qui, con un nuovo quesito, e nella speranza di un vostro aiuto che come sempre è stato eccezionale.
Ho provato gia a cercare risposta ai miei quesiti QUI ma non mi è stato di aiuto.
La funzione che sto per postarvi, almeno dalle prove che ho fatto fa il suo dovere.
Quello che fa è confrontare tutti gli elementi della lista A con tutti gli elementi della lista B. In particolare vengono confrontati i membri "val".
-Se A->val == B->val, la funzione accoda la stringa di quell'elemento di B alla stringa dell'elemento di A.
-Se invece A->val è diverso da tutti quelli di B allora l'elemento in quel momento puntato da A va eliminato dalla lista.
Un esempio è questo:
Ok, detto questo, il probelma della mia funzione è che il free della riga 25 mi genera errore. Se invece non faccio quel free(e quindi non elimino dalla memoria quell'elemento) la funzione funziona... Potete svelarmi il mistero??A = {2, "Tara"} -> {1, "Pietra"} -> {2, "Casa"} -> {1, "Gioco"} -> {4, "Albero"}
B = {5, "Mela"} -> {1, "Mulo"} -> {4, "Campo"} -> {1, "Erba"}
allora la funzione modifica la lista A così:
{1, "PietraMuloErba"} -> {1, "GiocoMuloErba"} -> {4, "AlberoCampo"}
Struttura di riferimento:
Funzione:codice:typedef struct Elem { long val; char* str; struct Elem *next; } Elem, *List;
Errore:codice:List join(List A, List B) { List Acpy = A, libera = NULL, prec = NULL; List Bcpy = B; int boolEl; while(A != NULL) { libera = A; boolEl = 1; B = Bcpy; while(B != NULL) { if(A->val == B->val) { strcat(A->str, B->str); boolEl = 0; } B = B->next; } if(!prec && boolEl) { A = A->next; free(libera); Acpy = A; } else if(prec && boolEl) { A = A->next; prec->next = A; free(libera); <----E' LUI L'IMPUTATO } else if(!boolEl) { prec = A; A = A->next; } } return Acpy; }
Vi ringrazioException: STATUS_ACCESS_VIOLATION at eip=6110D359
eax=ADBD9314 ebx=7245D0CC ecx=0E48ADED edx=20030280 esi=200363E0 edi=ADBD9314
ebp=0022CC98 esp=0022CBF0 program=C:\cygwin\home\3\a.exe, pid 3792, thread main
cs=001B ds=0023 es=0023 fs=003B gs=0000 ss=0023
Stack trace:
Frame Function Args
0022CC98 6110D359 (200302A8, 00000000, 0022CCE8, 49435341)
0022CCC8 004011E0 (00000001, 0022CCF0, 20010100, 612671DE)
0022CD58 61006EE8 (00000000, 0022CDA8, 610064E0, 00000000)
End of stack trace
Segmentation fault (core dumped)![]()