Se quello che ho detto è corretto significa che tramile la lista TList listkey si comunica alla tabella THashTable *ht cosa eliminare
rivedendo quel poco di codice che mi hai spedito ho trovato un bug, hashtable_delete(ht,listkey->info.key); e listkey=listkey->link;
vanno messi dentro l'if , per il semplice motivo che setti TList listkey con dei valori che non sono presenti nella tabella THashTable *ht
la funzione hashtable_search restituisce null con la conseguenza che vai a richiamare hashtable_delete con una coppia di chiavi che non esiste.
non avendo il codice di list_delete non so' se quì dentro passandogli delle chiavi inesistenti ti esplode.
CON BUG:
void HTsplitList(THashTable *ht,TList listkey,TList *listOdd,TList *listEven){
*listEven=list_create();
*listOdd=list_create();
while(listkey!=NULL){
if(hashtable_search(ht,listkey->info.key)!=NULL){
if(listkey->info.value %2==0)
*listEven=list_insert(*listEven,listkey->info);
else
*listOdd=list_insert(*listOdd,listkey->info);
}
hashtable_delete(ht,listkey->info.key);
listkey=listkey->link;
}
return;
}
CORRETTO:
void HTsplitList(THashTable *ht,TList listkey,TList *listOdd,TList *listEven){
*listEven=list_create();
*listOdd=list_create();
while(listkey!=NULL){
if(hashtable_search(ht,listkey->info.key)!=NULL){
if(listkey->info.value %2==0)
*listEven=list_insert(*listEven,listkey->info);
else
*listOdd=list_insert(*listOdd,listkey->info);
hashtable_delete(ht,listkey->info.key);
listkey=listkey->link;
}
}
return;
}
dalla descrizione che mi hai dato non ci dovrebbereo essere altre modifiche.
Hai scritto tu questo codice ?