Buenas tardes gente,
Estoy aprendiendo C y me estoy rompiendo el marote contra la pared bien fuerte.
Tengo una estructura Persona. La cual quiero manipularla dinamicamente a traves de la estructura Array (TDA) y me surgio un problema que desconozco a que se puede deber.
Si cargo el array desde el main() todo funciona perfecto. Cuando lo quiero cargar a traves de un metodo, se rompe todo.
He aqui el codigo:
Estoy aprendiendo C y me estoy rompiendo el marote contra la pared bien fuerte.
Tengo una estructura Persona. La cual quiero manipularla dinamicamente a traves de la estructura Array (TDA) y me surgio un problema que desconozco a que se puede deber.
Si cargo el array desde el main() todo funciona perfecto. Cuando lo quiero cargar a traves de un metodo, se rompe todo.
He aqui el codigo:
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct persona{
char *nombre;
int edad;
int sexo;
}Persona;
typedef struct {
int size;
Persona vecPersona[];
}Array;
Array* getArrayInstance(){
Array *vec;
vec = (Array*) malloc (sizeof(Persona));
vec->size = 0;
return vec;
}
void push_back(Array ** vec, Persona tipito){
(*vec)->vecPersona[(*vec)->size] = tipito;
(*vec)->size++;
printf("%d-", (*vec)->size);
int newSize = (*vec)->size*2-(*vec)->size+1;
Array *tmp = realloc((*vec), newSize*sizeof(Persona));
if(tmp)
*vec = tmp;
else
(*vec)->size--;
}
void mostrarPersonas(Array *vec){
int i;
printf("\n\n");
printf("%d", vec->size);
for(i=0; i<vec->size; i++){
printf("(%d) Nombre: %s - Edad: %d - Sexo: ", i, vec->vecPersona[i].nombre, vec->vecPersona[i].edad);
if(vec->vecPersona[i].sexo == 0)
printf("Masculino");
else
printf("Femenino");
printf("\n");
}
}
void cargarPersonas(Array **vec){
int i, edad, random;
int cantPersonas = rand()%30+1;
Persona aux;
char **hombres = {"Ramiro","Pedro","Federico","Jose","Antonio","Pablo","Raul","Gustavo","Gonzalo","Airton"};
char **mujeres = {"Mariana","Jennifer","Luz","Roxana","Ana","Sol","Micaela","Romina","Melina","Camila"};
for(i=0; i<cantPersonas; i++){
edad = rand()%80+1;
aux.edad = edad;
if( (random = rand()%10) %2 == 0){ // hombres
aux.nombre = hombres[random];
aux.sexo = 0;
}
else{
aux.nombre = mujeres[random];
aux.sexo = 1;
}
push_back(vec, aux);
}
}
int main()
{
srand(time(NULL));
Array *vecPersonas = getArrayInstance();
Persona aux;
aux.nombre="Cecilia";
aux.edad=27;
aux.sexo=0;
push_back(&vecPersonas, aux); // Esto anda
push_back(&vecPersonas, aux); // Esto anda
push_back(&vecPersonas, aux); // Esto anda
push_back(&vecPersonas, aux); // Esto anda
push_back(&vecPersonas, aux); // Esto anda
push_back(&vecPersonas, aux); // Esto anda
//cargarPersonas(&vecPersonas); // Esto no
//printf("%d", vecPersonas->size);
mostrarPersonas(vecPersonas);
return 0;
}

