Crear arrays dinamicos en struct

Iniciado por manri98, 11 Noviembre 2016, 13:38 PM

0 Miembros y 1 Visitante están viendo este tema.

manri98

Hola a todos, tengo el siguiente problema. He creado la siguiente estructura, mi intención es que tenga un booleano, un array de caracteres(name)  y uno bidimensional(episodes)
Ejemplo:
    name = {"Name of the serie"}

    episodes = {"season1Title","Season2Title", "Season3Title"}
                       {"episode1","episode1","eisode1"}
                       {"episode2","episode2","eisode2"}
                     
    isAll = true



typedef struct{
    char *name;
    char *episodes;
    bool isAll;
}show;


Los datos que almacenará se sabrán en tiempo de ejecución y quería saber si era posible reservar dinámicamente espacio de memoria. En el código los escribí como punteros para mas tarde hacer esto:

show myShow;
myShow.name = (char *)malloc(longitudNombre*sizeof(char));


¿Esto sería corecto?¿Como lo haría para el array bidimensional? Además me surge la duda de como podría recorrer el array después. Si fuese sumando uno al puntero, creo que tendría que mirar cuando el valor es el byte nulo.
(\/)4|\|r1 98
-Cuantos dálmatas había en la peli?
-101
-por el culo te la hinco

manri98

Seguí investigando. Creo que declarar un array dentro del struct no es posible porque al crear una instancia el compilador necesitaría conocer el tamaño de este antes. No se estoy equivocado.
Así que sigo como antes :(
(\/)4|\|r1 98
-Cuantos dálmatas había en la peli?
-101
-por el culo te la hinco

MAFUS

Puedes crear un array dinámico dentro del struct ya que el miembro es un puntero, y ese es un tipo de dato con el tamaño bien definido.
El array propiamente dicho se crea en otra zona de memoria a la que apuntarás con el puntero del struct.

manri98

Y eso lo haría asi?

show myShow;
myShow.name = (char *)malloc(longitudNombre*sizeof(char));
(\/)4|\|r1 98
-Cuantos dálmatas había en la peli?
-101
-por el culo te la hinco

MAFUS

Sí. Recuerda aplicar free a los datos antes de que la estructura se destruya.