Mi sapete dire perchè questo programma a volte va in segmentation fault (errore #11) ?? Ho sbagliato qualcosa coi puntatori?? Grazie.
codice:
/*
ID: gygabyt1
LANG: C++
TASK: gift1
*/
//---------------------------------------------------------------------------
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
//---------------------------------------------------------------------------
typedef struct Persona
{
string Name;
int Soldi;
int Inizio;
string *Dest;
int NDest;
} Persona;
//---------------------------------------------------------------------------
Persona *Persone;
int getPersonaIndex(string name)
{
int i=0;
while(Persone[i++].Name!=name);
return i-1;
}
Persona getPersonaStr(string name)
{
return Persone[getPersonaIndex(name)];
}
//---------------------------------------------------------------------------
void Mostra(int i)
{
cout << Persone[i].Name << "\t" << Persone[i].Inizio << "\t" << Persone[i].Soldi << endl;
}
int main()
{
ifstream in("gift1.in");
ofstream out("gift1.out");
int NP; in >> NP;
Persone = new Persona[NP];
for (int i=0; i<NP; i++)
in >> Persone[i].Name;
while (!in.eof())
{
string Donatore; in >> Donatore;
Persona Temp = getPersonaStr(Donatore);
in >> Temp.Soldi >> Temp.NDest; Temp.Inizio = Temp.Soldi;
Temp.Dest = new string[Temp.NDest];
for (int i=0; i<Temp.NDest; i++)
in >> Temp.Dest[i];
Persone[getPersonaIndex(Donatore)] = Temp;
}
for (int i=0; i<NP; i++)
{
for (int j=0; j<Persone[i].NDest; j++)
{
Persone[getPersonaIndex(Persone[i].Dest[j])].Soldi+=Persone[i].Inizio/Persone[i].NDest;
Persone[i].Soldi -= Persone[i].Inizio/Persone[i].NDest;
}
//Mostra(i);
}
for (int i=0; i<NP; i++)
{
out << Persone[i].Name << " " << Persone[i].Soldi-Persone[i].Inizio << endl;
}
return 0;
}
//------------
Grazie