Otra cosa importante: en vez de:
Código
pon:
Persona vecPersona[];
Código
Puesto que es un puntero.
Persona *vecPersona;
Además, tienes otros errores como, en push_back:
Código
int newSize = (*vec)->size*2-(*vec)->size+1;
No sé qué pretendes sacar con esa ecuación. Al principio, siendo size=1, haces un realloc((*vec)->vecPersona, 0). Y ya luego, valores altos. Eso debería quedar:
Código
int newSize = (*vec)->size+1;
En fin, he reconstruido esa función:
Código
void push_back(Array ** vec, Persona tipito){ int newSize = (*vec)->size+1; if(tmp){ (*vec)->vecPersona = tmp; (*vec)->vecPersona[(*vec)->size] = tipito; (*vec)->size++; } }
Además, inicialicé el contenido de vecPersona en getArrayInstance:
Código
Array* getArrayInstance(){ Array *vec; vec->vecPersona = 0; vec->size = 0; return vec; }
Y otro tema muy importante:
Código
No puedes poner un doble puntero para ser inicializado de ese modo.
char *hombres[] = {"Carlos", "Pablo"};
Además, en push_back te recomiendo poner:
Código
Copiar las cadenas, no copiar los punteros, puesto que si se libera la memoria de uno de ellos, todos los demás perderán lso datos, y podrán tirar errores.
Claro que si vas a hacer un método "pop", tendrás que recordar liberarlos.
Bueno, este es el código completo, por si quieres ver qué se cambió más claramente:
Para strlen y strcpy, la librería <string.h>
Código
#include <stdio.h> #include <stdlib.h> #include <string.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->vecPersona = 0; vec->size = 0; return vec; } void push_back(Array ** vec, Persona tipito){ int newSize = (*vec)->size+1; if(tmp){ (*vec)->vecPersona = tmp; (*vec)->vecPersona[(*vec)->size] = tipito; (*vec)->size++; } } void mostrarPersonas(Array *vec){ int i; 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) else } } void cargarPersonas(Array **vec){ int i, edad, random; 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++){ aux.edad = edad; aux.nombre = hombres[random]; aux.sexo = 0; } else{ aux.nombre = mujeres[random]; aux.sexo = 1; } push_back(vec, aux); } } int main() { Array *vecPersonas = getArrayInstance(); cargarPersonas(&vecPersonas); // Esto no mostrarPersonas(vecPersonas); return 0; }