Declarar e inicializar matriz 2D de tamaño desconocido en C

Planeo crear una matriz 2D de un puntero derivado de typedef struct

Digamos que la typedef struct se denomina “Elementos” y contiene variables mixtas de cadenas y enteros.

Declararé dos variables int : typenum y typetotal . Estos dos enteros comenzarán desde cero y se sumn cuando los datos de entrada coincidan con cierta función.

En la matriz, Items *type[][] , básicamente type[][] es Items *type[typenum][typetotal] pero no puedo hacer esto ya que declararé typenum y typetotal como cero en la parte de la statement.

Intenté inicializar la matriz a través de Items *type[][] = {{0},{0}} pero esto genera un error.

¿Algún consejo? Algunos me dijeron que usara malloc () en esto, pero simplemente no sé cómo.

* Usando Tiny C en Windows

Utilice la asignación de memoria dinámica.

 Items **type; type = malloc(sizeof (Items *) * typenum); for (int i = 0; i < typenum; i++) type[i] = malloc(sizeof Items) * typetotal); 

Debe liberar manualmente la memoria asignada después de usar la matriz.

 for (int i = 0; i < typenum; i++) free(types[i]); free(types); 

Aquí hay un tutorial sobre él: http://www.eskimo.com/~scs/cclass/int/sx9b.html

Si el número de typenum y el typetotal aumentan a medida que se ejecuta su progtwig, asegúrese de utilizar realloc , que reasignará más memoria y conservará el contenido. Tendrá que asignar la primera dimensión de la matriz de esta manera:

 myArray = realloc(myArray, sizeof(Items*) * typenum); 

y luego asigne la segunda dimensión para cada uno de los primeros:

 for(...) myArray[i] = realloc(myArray[i], sizeof(Items) * typetotal);