Mam taki program:
Jest to program, w którym jest "baza danych". Ma on możliwość wyświetlenia listy studentów, dodawania imienia, nazwiska i nr albumu studenta, znajdowania konkretnej osoby i usuwania studenta z listy. Niestety, kiedy wprowadzam do programu dane, a potem chcę usunąć jakąś pozycję, to program się zawiesza. Kiedy uruchamiam debuggera, to komunikuje mi on "segmentation fault". Myślę, że błąd jest w pętli:
Jednak nie wiem, dlaczego. Jak można rozwiązać ten problem?
#include <iostream>
#include <string.h>
#include <cstdlib>
#include <conio.h>
using namespace std;
const int MAX = 100;
const int stud = 300;
struct student
{
char nazwisko[MAX], imie[MAX];
int album;
};
student *tab[stud];
int wypelnij(int b)
{
tab[b] = new student;
cout << "Podaj imie studenta" << endl;
cin >> tab[b]->imie;
cout << "Podaj nazwisko studenta" << endl;
cin >> tab[b]->nazwisko;
cout << "Podaj numer albumu" << endl;
cin >> tab[b]->album;
}
int znajdz(int b)
{
char im[MAX], nazw[MAX];
cout << "Podaj imie szukanego studenta" << endl;
cin >> im;
cout << "Podaj nazwisko szukanego studenta" << endl;
cin >> nazw;
for( int i=0;i<b;i++)
{
if((strcmp(im, tab[i]->imie)==0) && (strcmp (nazw, tab[i]->nazwisko)==0))
{
cout << "Student ten znajduje sie na liscie, na " << i+1 << " pozycji" << endl;
}
if(i==b-1)
{
cout << "Nie znaleziono studenta" << endl;
}
}
}
int main()
{
int a,b=0,c=0,i=0,d;
while(a!=5)
{
cout << "Wybierz opcje" << endl;
cout << "1 – Wyswietl liste" << endl;
cout << "2 – Dodaj studenta" << endl;
cout << "3 – Znajdz studenta" << endl;
cout << "4 – Usun studenta" << endl;
cout << "5- Koniec" << endl;
cout << endl;
cout << "Twoj wybor to: ";
cin >> a;
switch(a)
{
case 1:
cout << "Oto lista studentow:" << endl;
for( int i=0; i<b;i++)
{
c=i+1;
cout << c << ") " << tab[i]->imie << " " << tab[i]->nazwisko << " " << tab[i]->album << endl;
}
cout << endl;
break;
case 2:
wypelnij(b);
cout << endl;
b++;
break;
case 3:
znajdz(b);
break;
case 4:
cout << "Podaj pozycje studenta na liscie, ktorego chcesz usunac" << endl;
cin >> d;
for(int e=d-1;e<b;e++)
{
strcpy(tab[e]->imie, tab[e+1]->imie);
strcpy(tab[e]->nazwisko, tab[e+1]->nazwisko);
tab[e]->album = tab[e+1]->album;
}
b--;
break;
}
}
system("PAUSE");
return 0;
}
Jest to program, w którym jest "baza danych". Ma on możliwość wyświetlenia listy studentów, dodawania imienia, nazwiska i nr albumu studenta, znajdowania konkretnej osoby i usuwania studenta z listy. Niestety, kiedy wprowadzam do programu dane, a potem chcę usunąć jakąś pozycję, to program się zawiesza. Kiedy uruchamiam debuggera, to komunikuje mi on "segmentation fault". Myślę, że błąd jest w pętli:
for(int e=d-1;e<b;e++)
{
strcpy(tab[e]->imie, tab[e+1]->imie);
strcpy(tab[e]->nazwisko, tab[e+1]->nazwisko);
tab[e]->album = tab[e+1]->album;
}
Jednak nie wiem, dlaczego. Jak można rozwiązać ten problem?