Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

Error utilizando "realloc"

Participa en el tema Error utilizando "realloc" en el foro Programación.
Hola a todos estoy tratando de compilar esto y me salen unos garabatos alguien sabe ...

Buscar en este tema:
 
  •  
    #1 Error utilizando "realloc"
    Hola a todos estoy tratando de compilar esto y me salen unos garabatos alguien sabe porque?:

    ---------------------------------------------
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    unsigned ID=0;//ID de las citas.
    /*
    1. Escriba un programa que permita gestionar una agenda de citas utilizando memoria
    dinámica. La agenda contiene una serie de citas, ordenadas por fecha, cada una de las
    cuales está compuesta por: la fecha en la que se celebrará, identificador y el asunto
    que se desea tratar en la misma (100 caracteres como máximo, aunque deberás reservar
    sólo los necesarios para que quepa la cadena). El programa presentará repetidamente,
    mientras el usuario lo desee, un menú con las siguientes opciones:

    a)Introducir una cita. Solicita al usuario la fecha y asunto de una nueva cita e
    inserta,ordenadamente por fecha, la cita en la agenda. El identificador se genera
    automáticamente.

    b)Mostrar las citas de una fecha. Pide una fecha y muestra todas las citas
    correspondientes a dicha fecha.


    c)Actualizar la agenda. Solicita al usuario la fecha actual y elimina de la agenda
    todas las citas anteriores a la fecha introducida.

    d)Cancelar una cita. Solicita al usuario la fecha y asunto de una cita existente,
    y elimina dicha cita de la agenda. Si no existe la cita, muestra un mensaje de error.
    */
    typedef struct
    {
    int dia;
    int mes;
    int ano;
    }fech;

    typedef struct
    {
    unsigned id;
    fech fecha;
    char asunto[100];

    }agenda;

    void asignar(agenda **, int );
    void nueva(agenda *, int *);
    void ordenar(agenda *, int);
    void buscar(agenda *, int );
    void actualizar(agenda *, int *);
    void imprimir(agenda *, int);
    void eliminar(agenda *, int *);


    int main()
    {

    int opc, pos=0;
    agenda *a;
    printf("WELCOME\n\n\n");
    getchar();
    system("clear");

    do
    {
    printf("MENU\n\n\n1-Agregar Citas\n2-Mostrar Citas\n3-Actualizar\n4-Eliminar Cita\n#-Salir\n:: ");
    scanf("%d", &opc);

    switch(opc)
    {
    case 1:
    a=(agenda *)realloc(a, (pos+1)*sizeof(agenda));

    if(a==NULL)
    printf("\nNo HAy espacio suficiente en memoria para esa operacion.\n");
    else
    {
    nueva(a, &pos);
    ordenar(a, pos);

    }

    break;

    case 2: buscar(a, pos); break;

    case 3:
    actualizar(a, &pos);

    imprimir(a, pos);
    break;

    case 4:
    eliminar(a, &pos);
    ordenar(a, pos);
    imprimir(a, pos);
    break;

    }


    }while(opc>=1 && opc<=4);
    free(a);

    return 0;
    }


    void nueva(agenda *a, int *pos)
    {
    ID++;

    (a+(*pos))->id=ID;
    printf("\nFecha del asunto\nDia: ");
    scanf("%d", &(a+*pos)->fecha.dia);
    printf("Mes: ");
    scanf("Ano: ", &(a+(*pos))->fecha.mes);
    printf(": ");
    scanf("%d", &(a+(*pos))->fecha.ano);
    printf("Asunto: "); scanf("%s", (a+(*pos))->asunto);
    pos++;
    printf("\n\n");

    }

    void ordenar(agenda *a, int pos)
    {
    int i, j, fmen, tmpf;
    char tmpa[100];
    unsigned tmpid;

    for(i=0; i<pos-1; i++)
    {
    fmen=i;
    for(j=fmen+1; j<pos; j++)
    if( ((a+i)->fecha.ano)>((a+j)->fecha.ano) )
    fmen=j;
    else if( ((a+i)->fecha.mes)>((a+j)->fecha.mes) && ((a+i)->fecha.ano)>=((a+j)->fecha.ano))
    fmen=j;
    else if( ((a+i)->fecha.mes)>=((a+j)->fecha.mes) && ((a+i)->fecha.ano)>=((a+j)->fecha.ano) && ((a+i)->fecha.dia)>=((a+j)->fecha.dia) )
    fmen=j;


    if(fmen!=i)
    {
    //Intercambio de dias.
    tmpf=((a+fmen)->fecha.dia);
    ((a+fmen)->fecha.dia)=(a+i)->fecha.dia;
    (a+i)->fecha.dia=tmpf;

    //Intercambio de meses.
    tmpf=((a+fmen)->fecha.mes);
    ((a+fmen)->fecha.mes)=(a+i)->fecha.mes;
    (a+i)->fecha.mes=tmpf;

    //Intercambio de anos
    tmpf=((a+fmen)->fecha.ano);
    ((a+fmen)->fecha.ano)=(a+i)->fecha.ano;
    (a+i)->fecha.ano=tmpf;

    //Intercambio de ID
    tmpid=(a+fmen)->id;
    (a+fmen)->id=(a+i)->id;
    (a+i)->id=tmpid;

    //Intercambio de Asuntos.
    strcpy( tmpa, ((a+fmen)->asunto));
    strcpy( ((a+fmen)->asunto), ((a+i)->asunto ));
    strcpy( ((a+i)->asunto ) , tmpa );



    }

    }


    }


    void buscar(agenda *a, int pos)
    {
    int i, j=0;

    int dia, mes, ano;

    printf("\n\nBUSCADOR\n\nescriba el dia, fecha y hora de la cita: ");
    scanf("%d%d%d", &dia, &mes, &ano);

    for(i=0; i<pos; i++)
    if( ((a+i)->fecha.dia == dia) && ((a+i)->fecha.mes == mes) &&((a+i)->fecha.dia == dia) )
    {
    printf("\nFecha: %d/%d/%d Asunto: %s\n\n", dia, mes, ano, (a+i)->asunto);

    j++;
    }

    if(!j)
    printf("\nNo se encontro la cita.\n\n");
    }

    void actualizar(agenda *a, int *pos)
    {
    int i, dia, mes, ano, j;

    printf("\nEscribe dia, mes y ano actual: ");
    scanf("%d%d%d", &dia, &mes, &ano);

    for(i=0; i<*pos; i++)
    if( (a+i)->fecha.dia<dia && (a+i)->fecha.mes<mes && (a+i)->fecha.ano<ano)
    {
    for(j=i; j<*pos-1; j++)
    {
    (a+j)->fecha.dia=(a+j+1)->fecha.dia;
    (a+j)->fecha.mes=(a+j+1)->fecha.mes;
    (a+j)->fecha.ano=(a+j+1)->fecha.ano;
    strcpy( (a+j)->asunto, (a+j+1)->asunto );
    }
    i--;
    (*pos)--;
    }
    printf("\n\nAgenda actualizada.\n\n");
    }

    void imprimir(agenda *a, int pos)
    {
    int i;

    printf("\n\n");
    if(pos!=0)
    {
    printf("========================================== =======\n");
    printf(" AGENDA DE CITAS \n");
    printf("========================================== =======\n");

    for(i=0; i<pos; i++)
    {
    printf("ID: %u/tFecha %d/%d/%d.\n Asunto %s\n", (a+i)->id, (a+i)->fecha.dia, (a+i)->fecha.mes, (a+i)->fecha.ano, (a+i)->asunto);
    printf("-------------------------------------------------\n\n");

    }
    }
    else printf("\n\nNo hay entradas en la agenda.\n\n");
    }


    void eliminar(agenda *a, int *pos)
    {
    int i, dia, mes, ano, j;
    char asunto[100];

    printf("\nEscribe dia, mes y ano a borrar: ");
    scanf("%d%d%d", &dia, &mes, &ano);
    printf("Asunto a eliminar: ");
    scanf("%s", asunto);

    for(i=0; i<(*pos); i++)
    if( (a+i)->fecha.dia==dia && (a+i)->fecha.mes==mes && (a+i)->fecha.ano==ano && (strcmp (asunto,(a+i)->asunto)== 0) )
    {
    for(j=i; j<(*pos)-1; j++)
    {
    (a+j)->fecha.dia=(a+j+1)->fecha.dia;
    (a+j)->fecha.mes=(a+j+1)->fecha.mes;
    (a+j)->fecha.ano=(a+j+1)->fecha.ano;
    strcpy( (a+j)->asunto, (a+j+1)->asunto );
    }
    i--;
    (*pos)--;
    }


    }
    --------------------------------------------------

    Y al seleccionar la opcion 1 me sale esto en la consola:

    +
     
    0
    Me gusta
     
    http://www.psicofxp.com/forums/programacion.313/972209-error-utilizando-realloc.html
    | Más
  • #2 Re: Error utilizando "realloc"

    No podés usar realloc sobre un puntero no inicializado. Poné a en NULL al principio del programa.
    Me gusta este mensaje
  • #3 Re: Error utilizando "realloc"

    Men me salvaste, mil gracias.!!!!
    Me gusta este mensaje
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 2 RESPUESTAS
  • 94 VISTAS
  • 2 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB