Du übergibst an mehren Stellen printf und fscanf falsche Werte. So steht %s für String und %c für Char.
fscanf(f,"%s,%s,%i",&Name,&st,semester); -> &st ist ein Char also
also -> fscanf(f,"%s,%c,%i",&Name,&st,semester);
Dieses Problem hast du mehrfach auch bei Printf.
fprintf(f,"%s %s %i",Name, st, semester);
also besser fprintf(f,"%s %c %i",Name, st, semester);
Bei Speicherfehlern immer alle fscanf, printf u.s.w prüfen, sind meiner Erfahrung nach fast immer der Grund.
Bei den char Werten kannst du dir den Referenzparameter sparen, da char ein einfacher Datentyp ist und somit immer referenziert wird.
Falls weiter Probs auftreten bitte das Prog. mit Includes und Rahmen zur Verfügung Stellen, damit man es testen kann.
Mfg der Lumpi