[SOLUZIONE]
Era una incompatibilità fra "char str[100];" che usavo per copiare i dati nelle stringhe tipo "string idprod;" risolto tutto sostituendo le string con char*"
[/SOLUZIONE]
(potete cancellare/chiudere se volete, scusate il disturbo! )
Salve ragazzi

non riesco a risolvere questo problema! In pratica quando avvio il main e creo il file per la prima volta attraverso questo codice
codice:
FILE *fprod;
	fprod=fopen("prodotti.dat","rb");
if (fprod==NULL) {
	cout<<"Impossibile aprire il file. Creazione in corso..."<<endl;
	fprod=fopen("prodotti.dat","wb");
	int header=0;
	fwrite(&header,sizeof(header),1,fprod);
fclose(fprod);
	}
con il quale imposto l'header iniziale a 0...il programma funziona alla perfezione. Cioè posso fare vari inserimenti e varie visualizzazioni senza incorrere in errori.

Quando chiudo il main, ed avvio nuovamente le sessioni di inserimento prodotti nel file (a prima vista sembra...) non dare errori, ma quando richiamo la visualizzazione crasha il programma...

I miei dubbi sono che ci sia qualche errore di scrittura o di apertura e quando procedo con la riapertura c'è uno sfasamento di campi che mi porta a questo errore.

Grazie in anticipo per ogni chiarimento!


Codice inserimento:
codice:
void prodotti::insprod(){
FILE *fprod;
prodotti *prod;
char str[100];
double pu;
int header,g;
	fprod=fopen("prodotti.dat","rb");
	fseek(fprod,-4,SEEK_END);
	fread(&header,sizeof(header),1,fprod);
	rewind(fprod);
	printf("L'header e': %d\n",header);

prod=new prodotti[header+1];

		fread(prod,sizeof(prodotti)*header,1,fprod);
		fclose(fprod);

		puts("Inserisci l'ID del prodotto: ");
		cin.sync();
		cin.getline(str,100);
		str[5]='\0';
		prod[header].setidprod(str);
		puts("Inserisci il nome prodotto: ");
		cin.sync();
		cin.getline(str,100);
		prod[header].setnome(str);
		puts("Inserisci il prezzo unitario: ");
		fflush(stdin);
		cin>>pu;
		cout<<"Il prezzo unitario inserito e': "<<pu<<endl;
		prod[header].setpunit(pu);
		puts("Inserisci la giacenza complessiva: ");
		fflush(stdin);
		cin>>g;
		prod[header].setgiac(g);


		header++;
		fprod=fopen("prodotti.dat","wb");
		fwrite(prod,sizeof(prodotti)*header,1,fprod);
		fwrite(&header,4,1,fprod);
		fclose(fprod);
}
Codice visualizza:
codice:
void prodotti::visualprod(){
FILE *fprod;
prodotti *prod;
int header;
	fprod=fopen("prodotti.dat","rb");
	fseek(fprod,-4,SEEK_END);
	fread(&header,4,1,fprod);
	rewind(fprod);
	printf("L'header e': %d\n",header);

		prod=new prodotti[header];

		fread(prod,sizeof(prodotti)*header,1,fprod);


for(int i=0;i<header;i++){
	cout<<"=====PRODOTTO n°:"<<i+1<<"====================================="<<endl
						<<"ID PRODOTTO: "<<prod[i].getidprod()<<endl
						<<"NOME PRODOTTO: "<<prod[i].getnome()<<endl
						<<"PREZZO UNITARIO: "<<prod[i].getpunit()<<" Euro cad."<<endl
						<<"DISPONIBILITA': "<<prod[i].getgiac()<<" pezzo/i"<<endl
						<<"======================================================="<<endl<<endl;
}
fclose(fprod);
system("pause");
}