Cześć, próbuję napisać funkcję sortującą listę jednokierunkową w C, ale co chwile wywala mi jakieś błędy i nie mam pomysłu już jak to zrobić. Na pewno mam gdzieś błędy ze wskaźnikami, alokacją pamięci albo czymś takim, ale nie wiem gdzie i czemu. Byłbym wdzięczny za pomoc :>

void sortuj(workday** lista)
{
    workday* posortowana;
    workday *przed_max;
	while (lista != NULL) {                  
		workday *max = *lista;
		workday* p;
		workday* i;        
		for (p = *lista, i = lista->next; *i != NULL; p = *i, i = i->next) {
			if (czasPracy(i) > czasPracy(max)) {
				*max = i;
				*przed_max = p;
			}
		}
		
		if (przed_max != NULL) 
			przed_max->next = max->next;
		else 
			lista = max->next; 
		max->next = posortowana; 
		posortowana = max; 
	}
	lista = posortowana;
}