Despues de solucionar el tema de los punteros, ahora estoy inmerso con los fichero binarios.
En la aplicacion que estoy haciendo tengo que mandar los datos escritos por el usuario a un fichero binario, la cosa es que ya tengo hecho ese codigo y se que funciona. Pero la aplicacion tambien tiene que poder sacar los datos del fichero binario y volver a volcarlos a la estructura que estamos utilizando.
Y aqui surgen los problemas, compilo ejecuto le doi a la opcion de rescatar los datos y el programa se cierra. (El programa casca)
En cambio le hago un paso a paso con un punto de ruptura y el programa FUNCIONA y sin ningun problema.
¿Como puede ser que funcione de una forma y de otra no?
Utilizo el dev-cpp 4.9.9.0, pero no se si el problema tiene que ver con el compilador.
La cosa es que para saber donde casca el programa como con el paso a paso no lo encontraba utilizo los system("pause"). Y resulta que el programa se cierra en cuanto el programa lee el segundo bloque de bytes del fichero binario.
Para hacer todo esto lo que estoy utilizando es:
Código: Seleccionar todo
void CBiblioteca::rescatarfichero()
{
char *titulo=NULL;
char *autor=NULL;
char *editorial=NULL;
int tipo,tamat,tamaa,tamae,p,anno,numre;
long ref,numvol;
bool prestado;
FILE *fp=NULL;
fp=fopen("datos.dat","rb");
while (!feof(fp))
{
tipo=0;
fread(&tipo,sizeof(int),1,fp); //tipo
system("pause"); //<--------En cuanto pasa de aqui el programa se cierra
if (tipo==1)
{
system("pause");//<-------------------A este punto no llega el programa
fread(&ref,sizeof(long),1,fp); //referencia
system("pause");
fread(&tamat,sizeof(int),1,fp);
char cad[tamat]; //titulo
fread(cad,sizeof(char),tamat+1,fp);
titulo=new char [tamat];
strcpy(titulo,cad);
fread(&tamaa,sizeof(int),1,fp);
char cad1[tamaa]; //autor
fread(cad1,sizeof(char),tamaa+1,fp);
autor=new char [tamaa];
strcpy(autor,cad1);
fread(&tamae,sizeof(int),1,fp);
char cad2[tamae+1]; //editorial
fread(cad2,sizeof(char),tamae+1,fp);
editorial=new char [tamae];
strcpy(editorial,cad2);
fread(&p,sizeof(int),1,fp); //prestado
if (p==1)
prestado=true;
else if (p==0)
prestado=false;
CFichaLibro *li=new CFichaLibro(ref,titulo,prestado,tipo,autor,editorial);
titulo=NULL;
autor=NULL;
editorial=NULL;
delete []titulo;
delete []autor;
delete []editorial;
ref--;
insertar(ref,li);
li=NULL;
delete []li;
}
else if (tipo==2)
{
fread(&ref,sizeof(long),1,fp); //referencia
fread(&tamat,sizeof(int),1,fp);
char cad[tamat]; //titulo
fread(cad,sizeof(char),tamat+1,fp);
titulo=new char [tamat];
strcpy(titulo,cad);
fread(&tamaa,sizeof(int),1,fp);
char cad1[tamaa]; //autor
fread(cad1,sizeof(char),tamaa+1,fp);
autor=new char [tamaa];
strcpy(autor,cad1);
fread(&tamae,sizeof(int),1,fp);
char cad2[tamae+1]; //editorial
fread(cad2,sizeof(char),tamae+1,fp);
editorial=new char [tamae];
strcpy(editorial,cad2);
fread(&p,sizeof(int),1,fp); //prestado
if (p==1)
prestado=true;
else if (p==0)
prestado=false;
fread(&numvol,sizeof(long),1,fp); //num volumen
CFichaVolumen *libv=new CFichaVolumen(ref,titulo,prestado,tipo,autor,editorial,numvol);
titulo=NULL;
autor=NULL;
editorial=NULL;
delete []titulo;
delete []autor;
delete []editorial;
ref--;
insertar(ref,libv);
libv=NULL;
delete []libv;
}
else if (tipo==3)
{
fread(&ref,sizeof(long),1,fp); //referencia
fread(&tamat,sizeof(int),1,fp);
char cad[tamat]; //titulo
fread(cad,sizeof(char),tamat+1,fp);
titulo=new char [tamat];
strcpy(titulo,cad);
fread(&p,sizeof(int),1,fp); //prestado
if (p==1)
prestado=true;
else if (p==0)
prestado=false;
fread(&anno,sizeof(int),1,fp); //año
fread(&numre,sizeof(int),1,fp); //num revista
CFichaRevista *rev=new CFichaRevista(ref,titulo,prestado,tipo,anno,numre);
titulo=NULL;
delete []titulo;
ref--;
insertar(ref,rev);
rev=NULL;
delete []rev;
}
}
fclose(fp);
}