[c++]Problem z listą jednokierunkową

Mam do zrobienia program na podstawie listy jednokierunkowej ktory wpisuje do listy dane np. studenta wczytane z klawiatury i wypisuje je

Problem polega na tym ze wypisuje mi dane pierwszej osoby ale drugiej juz nie , bo wyskakuje jakis błąd , nowe elementy do listy dodawane sa na koniec listy

oto kod:

#include 

#include 

#include 

#include 

#include 

#include 


using namespace std;


struct student //struktura opisujaca studenta

{

	int id;

	string imie;

	string nazwisko;

	string data_ur;

	string kierunek_studiow;

	int rok_studiow;

	student * nastepny; //wskaznik na nastepnego studenta


};


int nr_id=0;


void wypisz(student* osoba) //wypisuje zawartosc listy, osoba - wskaznik na pierwszego studenta

{

	cout<

	while(osoba != NULL) //powtarzamy dopoki wskaznik na nastepnego studenta jest rozny od NULL

	{

		cout<< osoba->id <<"\t"; //wypisywanie wszystkich danych dotyczacych studenta

		cout<< osoba->imie <<"\t";

		cout<< osoba->nazwisko <<"\t";

		cout<< osoba->data_ur <<"\t";

		cout<< osoba->kierunek_studiow <<"\t";

		cout<< osoba->rok_studiow<
		osoba = osoba->nastepny; //ustawienie wskaznika na nastepna osobe

	}

	cout<
}



student* dodaj(student* pierwszy,student* nowy) 

{

	nr_id++; //zwiekszenie Id

	nowy->id=nr_id; //nadanie studentowi nowego Id

	student* ostatni=NULL;


    if(pierwszy==NULL) //jesli lista jest pusta

	{

		pierwszy=nowy;

		ostatni=pierwszy;

    }

	else //jesli lista nie jest pusta

	{

        ostatni->nastepny=nowy;

		ostatni=nowy;

	}

   return pierwszy;

}


void wyswietl_menu()

{

	cout<<" ***MENU***"<
	cout<<"1 - wypisz zawartosc bazy"<
	cout<<"2 - dodaj nowego studenta"<
	cout<<"Twoj wybor to:";

}


int main()

{


  student* pierwszy=NULL;

  int wybor = 0;


	while(wybor!=3) // powtarzamy dopoki wybor jest rozny od 9(koniec)

	{

		wyswietl_menu(); //wywolanie funkcji wyswietlajacej menu

		cin>>wybor; // pobranie wybory uzytkownika


		switch(wybor) //spawdzenie wyboru uzytkowwnika

		{

			case 1:

				wypisz(pierwszy);

				break;

			case 2:

				{

				// Tworzenie nowego studenta

                                student* nowy=new student();

				nowy->nastepny=NULL;

				cout<
				cin>>nowy->imie;

				cout<
				cin>>nowy->nazwisko;

				cout<
				cin>>nowy->data_ur;

				cout<
				cin>>nowy->kierunek_studiow;

				cout<
				cin>>nowy->rok_studiow;

				cout<
				pierwszy=dodaj(pierwszy,nowy);

				break;

				}

			default:

				break;

		}

	}

  cin.ignore();				

  getchar();

  return 0;


}

Jak wpisuje dane drugiego studenta to wyskakuje taki błąd:

788ca11eabf38582m.jpg

Proszę o odp

bo masz dodawanie bezsensu, albo dodajemy na początek:

   nr_id++;   nowy-id=nr_id;   nowy-nastepny=pierwszy;   return nowy; [/code]albo na koniec z tym że jak chcesz dodawać na koniec to zrób lepiej listę jako osobną strukturę i trzymaj wskaźnik na ostatni rekord:
[code=php]   nr_id++;nowy-id=nr_id;student *ostatni=0;student *tmp=pierwszy;tmp;tmp=tmp-nastepny) ostatni=tmp;ostatni?ostatni-nastepny:pierwszy)=nowy;pierwszy;

Każdy kiedyś jeździł po pamięci. Nawet dziś się zdarza… :slight_smile: