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

[C] ayuda con un problemita de struct

Participa en el tema [C] ayuda con un problemita de struct en el foro Programación.
tengo un problema creando un archivo de cabecera, hice una funcion que me tiene que ...

Buscar en este tema:
La comunidad de psicofxp.com está interesada en tu opinión sobre
[C] ayuda con un problemita de struct
Regístrate y comparte tu opinión ¡Es gratis y toma menos de un minuto!
 
  •  
    lemmy22 escribió el 19/05/2005 a las 20:15 hs.
     
    ¿Mensaje inapropiado?
    #1 [C] ayuda con un problemita de struct
    tengo un problema creando un archivo de cabecera, hice una funcion que me tiene que devolver una estructura.Pero cuando la quiero implementar con un programita me tira un error, aca les mando el codigo del header file y el del programa, a ver si alguien me puede ayudar.
    El error que me tira es illegal estructure operation

    Este es el archivo de cabecera:
    #include <string.h>
    #include <stdlib.h>
    typedef enum {
    SinActividad = 0,
    ClaseNormal,
    EvaluacionGrupalEscrita,
    EvaluacionGrupalOral,
    EvaluacionGrupalIndividual,
    ExamenFinal,
    InscripcionACurso,
    InscripcionAExamenFinal,
    PrimeraClase,
    PrimerRecuperatorio,
    SegundoRecuperatorio,
    UltimaClase
    } TipoDeActividad;
    static const char *meses[12][2] = {
    {"Ene", "Enero"},
    {"Feb", "Febrero"},
    {"Mar", "Marzo"},
    {"Abr", "Abril"},
    {"May", "Mayo"},
    {"Jun", "Junio"},
    {"Jul", "Julio"},
    {"Ago", "Agosto"},
    {"Sep", "Septiembre"},
    {"Oct", "Octubre"},
    {"Nov", "Noviembre"},
    {"Dic", "Diciembre"},
    };
    typedef struct {
    int fecha;
    TipoDeActividad tipo;
    const char *descripcion;
    } Actividad;
    static const int DiasAnio[]={0,31,60,91,121,152,182,213,244,274,305,335};

    Actividad Actividad_Crear(int,const char*,TipoDeActividad, const char*);

    Actividad Actividad_Crear(int dia, const char *mes, TipoDeActividad tipoact,
    const char *desc)
    {
    Actividad act;
    int i;
    for (i=0; (strcmp(mes, meses[i][0]) == 0) && i < 12; i++) {
    if ( i == 12 )
    act.fecha = 0;
    act.fecha = dia + DiasAnio[i];
    if ( malloc(strlen(desc) + 1) != NULL)
    act.descripcion = malloc(strlen(desc) + 1);
    strcpy(act.descripcion, desc);
    }
    return act;
    }

    Este es el programa:

    #include <stdio.h>
    #include "c:\progc\activida.h"
    main(void)
    {
    struct tipo {
    int fecha;
    int tipo;
    const char *descripcion;
    } acti;
    acti = Actividad_Crear(15, "Feb", 1,"Sin prueba");
    printf("%d %s", acti.fecha,acti.descripcion);
    return 0;
    }
     
    | Más
  • AGUSTIN_RAMONE escribió el 19/05/2005 a las 20:47 hs. ¿Mensaje inapropiado?

    #2 Re: ayuda con un problemita de struct

    despues de ver tu codigo puedo decirte dos cosas:
    1) dentro de Actividad_Crear, no tenes que compar si malloc te da null dentro del if sin asignar esa memoria a la variable. Es decir, tenes que hacerlo asi

    if ((act.descripcion = (char *) malloc(strlen(desc) + 1)) != NULL){
    printf("error: memoria insuficiente");
    exit(1);
    }
    El cast "(char *)" se lo tenes que poner sino te da error. Pero para que ande, en la definicion de la estructura Actividad tenes que sacarle el const que tiene el campo descripcion. Ya que si pones const, estas diciendole al compilador que el valor de esa variable no se va a modificar en ejecucion, y al hacer malloc estas modificando su contenido.


    2) dentro del main no hace falta crear la estructura, solo declaras la variable acti de tipo Actividad,, es decir el main tendria que ser:

    main(void)
    {
    Actividad acti;
    acti = Actividad_Crear(15, "Feb", 1,"Sin prueba");
    printf("%d %s", acti.fecha,acti.descripcion);
    return 0;
    }

    Si veo mas errores te digo..

    en vez de

    if ((act.descripcion = (char *) malloc(strlen(desc) + 1)) != NULL){..}

    es

    if ((act.descripcion = (char *) malloc(strlen(desc) + 1)) == NULL){
    exit(1);
    }

    aca va el codigo sin errores, lo puse todo en un .cpp
    Archivos adjuntos
    Tipo de archivo: zip codigo.zip (770 Bytes, 1 vistas)
  • lemmy22 escribió el 19/05/2005 a las 21:33 hs. ¿Mensaje inapropiado?

    #3 Re: ayuda con un problemita de struct

    Gracias che, ahora no me tira ningun error.
  • AGUSTIN_RAMONE escribió el 19/05/2005 a las 21:43 hs. ¿Mensaje inapropiado?

    #4 Re: ayuda con un problemita de struct

    de nada,, me olvide de decirte algo muy importante!,, siempre que asignas memoria dinamicamente mediante malloc, tenes que liberar esa memoria con free al final del programa, cuando ya no utilizas esa variable. por ejemplo:

    act.descripcion = (char *) malloc(strlen(desc)+1);
    ...
    ... le das el uso que quieras
    ...
    y al final pones
    free(act.descripcion);

    En el codigo que te pase no esta el free. asi que se lo tenes que poner antes del return 0 del main.
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 3 RESPUESTAS
  • 740 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