Non ho letto tutto il codice ma gia' queste due righe
sono errate.codice:LISTNODEPTR current = malloc(sizeof(LISTNODE)); current = NULL;
Tu allochi memoria e assegni il puntatore restituito e subito dopo poni il puntatore uguale a NULL senza tenere in considerazione il blocco di memoria allocato?
Ci credo che alla fine una free di quel blocco ti dara' un errore ...
Probabilmente, dato che current e' un puntatore che usi per spostarti tra gli elementi, non devi utilizzarlo per allocare memoria ...