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:
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"}
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??

Struttura di riferimento:
codice:
typedef struct Elem {
	long		 val;
	char*		 str;
	struct Elem *next;
} Elem, *List;
Funzione:
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;
}
Errore:
Exception: 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)
Vi ringrazio