Salve ragazzi è un pò che vado in giro per la rete in cerca di una soluzione al mio problema, ma siccome non ho trovato una soluzione ho deciso di postare su questo ottimo forum. Ho un problema con un programma che ho scritto che fa parte di un progetto da portare ad un esame. In questo progetto ci ho messo un pò di tutto quello che ho imparato sul C++, dalla gestione dei file al polimorfismo. Ho creato più funzioni ed ognuna gestisce un problema diverso, l'unico problema che ho è con la funzione che tratta il polimorfismo che posto di seguito. Mi da un errore di questo tipo "Violazione di accesso nella lettura del percorso" ma non capisco proprio dove possa essere l'errore!!il codice l'ho ricontrollato 1000 volte!

codice:
void stampatutto(void)
{
	FILE *fileAmministratore = NULL;
	FILE *fileIscritti = NULL;
	int contatore = 0; //contatore per contare quanti record ci sono nel file degli iscritti
	Iscritto i1;
	Amministratore a1;
	size_t i = 0;
	string flag;

	if ((fileAmministratore = fopen("amministratore.bin","rb")) == NULL)
		cout << "\nimpossibile aprire il file dell'amministratore\n";
	else
	{
		rewind(fileAmministratore);
		fread(&a1, sizeof(Amministratore), 1, fileAmministratore);
		fclose(fileAmministratore);
	}
	
	if ((fileIscritti = fopen("iscritti.bin","rb")) == NULL)
		cout << "\nimpossibile aprire il file degli iscritti\n";
	else
	{
		rewind(fileIscritti);
		while (!feof(fileIscritti))
		{
			fread(&i1, sizeof(Iscritto), 1, fileIscritti);
			if (!feof(fileIscritti))
				contatore++;
		}
//creo un vettore che contiene tanti elementi della classe iscritto quanti sono gli iscritti
		vector <Iscritto> iscritti(contatore);
//creo un vettore per contenere tanti puntatori alla classe base quanti sono gli iscritti 
//+ 1(amministratore)
		vector <Persona *> persone(contatore+1);
		//inizializzo il vettore riempiendolo con tutti i record degli iscritti
		rewind(fileIscritti);
		contatore = 0;
		while (!feof(fileIscritti))
		{
			fread(&i1, sizeof(Iscritto), 1, fileIscritti);
			if (!feof(fileIscritti))
			{
				iscritti[contatore] = i1;
				contatore++;
			}
		}

//inizializzo il primo elemento del vettore persone con l'indirizzo dell'oggetto 
//amministratore
		persone[0] = &a1;
//inizializzo tutti gli altri elementi del vettore persone con gli indirizzi degli oggetti 
		//iscritto memorizzati nell'altro vettore
		for (i = 1;i < persone.size(); i++)
			persone[i] = &iscritti[i-1];
		
		for (i = 0;i < persone.size(); i++)
		{
			(*persone[i]).stampa(); //L'ERRORE LO SEGNALA QUI
			cout << "\n";
		}
		
		cout << "\n\n...premere un tasto per tornare al menu dell'amministratore...\n";
		cin >> flag; //serve solo per far stoppare l'esecuzione del programma 
	        //dare il tempo di leggere tutto e poi tornare al menu dell'amministratore
		fclose(fileIscritti);
	}
	//una volta terminato il processo di torna al menu dell'amministratore
	amministratore();
}