//El problema fue solucionado!!!! ya l oencontre era la variable moves
Hola gente estoy haciendo un codigo que reserva memoria dinamica y guarda la direccion del primer elemento en un puntero a estructura. Luego se abre o genera un archivo. Cargo un dato al puntero y lo escribo en el archivo. El archivo se genera correctamente pero al cargar el dato al puntero , este se guarda en MAIN pero por alguna razon extraña al entrar a una funcion para gaurdar datos en archivo LOS DATOS DEL PUNTERO SE CONVIERTEN EN BASURA.
Miren les muestro el codigo a ver si alguien descubre el error:
//DECLARACIONES
typedef struct
{
char title[50];
int duracion;
} eMovies;
//MAIN
int quantity = 1;
int value;
int moves = 0;
eMovies* movies;
movies = newMovie(); // FUNCION 1
if( movies == NULL)
{
printf("ERROR INICIAL");
system("pause");
exit(1);
}
value = loadMovies(movies,&quantity,"movies.bin"); //FUNCION 2
if( !value )
{
printf("ERROR");
system("pause");
exit(1);
}
while(moves < quantity)
{
printf("El titulo es %d y la duracion es %s\n\n", (movies + moves)->duracion,(movies + moves)->title ); //imprimo la basura de la estructura
system("pause");
moves++;
}
printf("quantity es %d\n\n",quantity); //MUESTRO LA VARIABLE
system("pause");
printf("Ingrese titulo: ");
scanf("%s", (movies + moves)->title ); //SUSTITUYO LA BASURA POR UN STRING
setbuf(stdin, NULL);
printf("\nIngrese duracion: ");
scanf("%d", &(movies + moves)->duracion ); //SUSTITUYO LA BASURA POR UN INT
setbuf(stdin, NULL);
printf("%s", (movies + moves)->title); //EL STRING GUARDAO SE VE CORRECTAMEN
printf("%p",movies); //LA DIRECCION SE IMPRIME llamenla 0f455f
printf("Datos cargados en la estructura.\n");
system("pause");
saveMovies(movies,"movies.bin"); //FUNCION 3 ERROR ALLI
free(movies);
return 0;
------------------------
FUNCION 1
eMovies* newMovie(void)
{
eMovies* movie;
movie = malloc(sizeof(eMovies));
return movie;
}
FUNCION 2
int loadMovies(eMovies* movies, int* quantity , char* filename)
{
FILE* file;
eMovies* aux;
int verify = 1;
int moves = 0;
int writed;
file = fopen(filename,"rb");
if(file == NULL)
{
file = fopen(filename, "wb");
if(file == NULL )
{
verify = 0;
}
}
else
{
while( !feof(file) )
{
writed = fread(movies + moves,sizeof(eMovies),1,file );
if(writed != 1)
{
if( feof(file) )
{
break;
}
else
{
verify = 0;
break;
}
}
moves++;
if( moves >= *quantity )
{
aux =(eMovies*) realloc(movies,sizeof(eMovies)*(moves+1) );
if(aux == NULL)
{
verify = 0;
break;
}
movies = aux;
*quantity = moves+1;
}
}
}
fclose(file);
return verify;
}
FUNCION 3 LA PROBLEMATICA
int saveMovies(eMovies* movies, char* filename)
{
int verify = 1;
int moves = 0;
int readings;
FILE* file;
printf("\nDireccion de memoria de title: %p\n", movies->title);
//LA DIRECCION IMPRESA ES LA MISMA DEL MAIN, ESO ES CORRECTO
printf("\n %s", movies, (movies)->title );
//SE MUESTRA BASURA... EL DATO CARGADO EN EL MAIN YA NO ESTA OSEA WTF!!!!
scanf("%s", movies->title );
printf("\ndir %p, %s", movies, (movies)->title );
//MAS BASURA
system("pause");
file = fopen(filename,"wb");
if(file == NULL)
{
verify = 0;
}
else
{
while( !feof(file) )
{
readings = fwrite(movies + moves,sizeof(eMovies),1,file);
//ESCRIBE BASURA Y SE CUELGA EL PROGRAMA.........
if(readings != 1)
{
if( feof(file) )
{
break;
}
else
{
verify = 0;
break;
}
}
moves++;
}
}
fclose(file);
return verify;
}