forse ho capito!
hai passato il puntatore alla testa della lista, ma alla variabile puntatore p gli assegni ls che non è nulla o meglio non è stato allocato niente a ls, quindi quando gli assegni l'indirizzo di ls p punta a niente. ls fa parte del napespace?. Forse è questo. Non ti da errore di compilazione?.
Nelle altre funzioni tu passi pr e assegni: List *p = pr; qui invece gli passi pr e usi ls. Fammi sapere