Witam. Dopiero zaczynam zabawę z listami. Chcę aby ta lista była wyrazami. Lista powinna zapisywać do pliku. Program kompiluje i nie wykazuje żadnych błędów. Problem polega na tym że mogę dodać tylko jeden rekord, później menu zapętla się lub pojawia się komunikat i program przestaje działać. Pomożecie?

#include <stdio.h>
#include <stdlib.h>

struct element{
	char **rekord;
	char *nazwa;
	struct element *nast;
	struct element *poprz;
};

struct element *pierwszy = NULL;
struct element *ostatni = NULL;

int dodaj(){
	int i;
	struct element *nowy;
	char *nazwa;
	char **rekord;
	rekord=(char**)malloc(100*sizeof(char*));

	if((nowy = (struct element *)malloc(sizeof(struct element)))==NULL)
		return 1;

	for(i=0;i<3;i++)
    {printf("Podaj rekord: ");
    scanf("%s",&rekord[i]);
    }
nazwa = (char *)malloc(100*sizeof(char));
	printf("Podaj nazwe: ");
	scanf("%s",nazwa);
	for(i=0;i<3;i++)
    nowy->rekord[i]=rekord[i];
	nowy->nazwa = nazwa;

	if(pierwszy==NULL)
{
		nowy->nast=NULL;
		nowy->poprz=NULL;
		pierwszy=nowy;
		ostatni=nowy;
	} else {
		nowy->nast=NULL;
		nowy->poprz=ostatni;
		ostatni->nast=nowy;
		ostatni=nowy;
	}

	return 0;
}

void wyswietl(){
	struct element *tmp;
	int i;
	tmp=pierwszy;
	if(tmp==NULL) printf("Brak elementow do wyswietlenia");
	while(tmp!=NULL){
	printf("%s ", tmp->nazwa);
	for(i=0;i<3;i++)
        printf("%s ", &tmp->rekord[i]);
	tmp=tmp->nast;
	printf("\n");
	}
}
void zapisz(){
    struct element *tmp;
	int i,j;
	tmp=pierwszy;
	if(tmp==NULL) printf("Brak elementow do wyswietlenia");
	FILE * plik=fopen("dane.csv","w");
	while(tmp!=NULL){
    fprintf(plik,"%s,", tmp->nazwa);
	for(i=0;i<3;i++)
       {
         fprintf(plik,"%s", tmp->rekord[i]);
        if(i!=2)
            fprintf(plik,",");
       }
	tmp=tmp->nast;
	fprintf(plik,"\n");
	}
	fclose(plik);
}



void menu(){
	printf("\n1 - dodaj rekord\n2 - wyswietl cala liste\n3 - jakas inna niegotowa opcja\n4 - Zapisz\n 5 - Koniec \n");
}


int main(){
	int z=0;
	int liczba;
	printf("Program Lista jednokierunkowa\n");
	menu();



	while(z!=4){
	printf("\nOpcja: ");
	scanf("%d",&z);
		switch(z){
			case 1: system("cls");
					dodaj();
					menu(); break;
			case 2: system("cls");
					printf("\n");
					wyswietl();
					menu(); break;
			case 3: system("cls");
				menu();
			case 4: system("cls");
					printf("\n");
					zapisz();
					menu();
					break;
			case 5: printf("Koniec\n"); break;

			default: printf("Brak takiej opcji!!!\n"); break;
		}
	}
return 0;
}