( iattilagy | 2018. 04. 06., p – 08:54 )

if(fp==NULL) {
fclose(fp);

Ez konkrétan segfault lesz, mert az fclose nem szereti a NULL-t.

"A NULL helyett érdemes lehet egy jól definiált (az lehet globális konstans változó) értéket használni listavégnek, pl. ha biztosan nincs 0 értéked, használd a "0 id-jű rekord a vége" megoldást [aminek a next-je önmagára mutat]: így ha a többi rekord nem mutat ki a memóriából, akkor az egész láncod a saját memóriarészedben lesz, és ha bárhol hibázol, nem elszáll SIGSEG-gel, hanem végtelen ciklusba megy :)"

Ez nem tudom vicc-e, de nem. Inkább szálljon el segfaulttal mint fusson végtelen ciklusra és a lista vége legyen NULL mert az jól definiált, hogy nem mutat sehova. Egy kezdőnek nem kéne marhaságokat tanácsolni, mindenki NULL-t használ C-ben.