elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Terrible problema al trabajar con punteros, estructura, memoria dinam y archivo!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Terrible problema al trabajar con punteros, estructura, memoria dinam y archivo!  (Leído 1,192 veces)
Xargam

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Terrible problema al trabajar con punteros, estructura, memoria dinam y archivo!
« en: 1 Junio 2018, 18:26 pm »

//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;

}


« Última modificación: 1 Junio 2018, 19:00 pm por Xargam » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Memoria insuficiente al trabajar con bmp
.NET (C#, VB.NET, ASP)
arenoide 2 3,745 Último mensaje 4 Octubre 2011, 13:07 pm
por arenoide
Problema con estructura y punteros en C
Programación C/C++
Blaster 2 2,150 Último mensaje 8 Junio 2013, 21:08 pm
por 0xDani
ayuda con punteros a estructura
Programación C/C++
abaadoon 1 2,267 Último mensaje 12 Febrero 2016, 04:49 am
por 0xFer
Trabajar los campos de una estructura con o sin punteros (ventajas/desventajas)
Programación C/C++
NOB2014 4 2,480 Último mensaje 30 Junio 2016, 15:34 pm
por NOB2014
Consutla sobre un problema con punteros y memoria dinamica.
Programación C/C++
Arturo400 1 1,543 Último mensaje 22 Septiembre 2016, 22:15 pm
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines