Da ist ganz schön was durcheinander, also:
t_adresse *speicher[5];
Damit sagst du, dass speicher ein array der Länge 5 ist, wo jedes Arrayelement auf einen struct t_adresse zeigt, das war so sicher nicht gedacht. Du meinst denk ich mal:
t_adresse* speicher;
speicher = malloc(sizeof(t_adresse));
Nun versuchst du den Namen einzulesen und im speicher->name zu speichern.
fgets(speicher.name,sizeof(speicher.name),stdin);
So geht das nicht, weil speicher nur ein Zeiger ist, den musst du erst dereferenzieren, also:
fgets((*speicher).name,sizeof(speicher.name),stdin);
oder aber andere Schreibweise:
fgets(speicher->name,sizeof(speicher.name),stdin);
Und das gleiche Spiel bei dem Rest, sollte dann gehen (nicht geprüft)