Cambiar el tamaño de una matriz con C

Necesito tener una serie de estructuras en un juego que estoy haciendo, pero no quiero limitar la matriz a un tamaño fijo. Me dijeron que hay una forma de usar Realloc para hacer que la matriz sea más grande cuando lo necesita, pero no se encuentran ejemplos de esto.

¿Podría alguien por favor mostrarme cómo hacer esto?

Comience creando la matriz:

structName ** sarray = (structName **) malloc(0 * sizeof(structName *)); 

Siempre haga un seguimiento del tamaño por separado:

 size_t sarray_len = 0; 

Para boost o truncar:

 sarray = (structName **) realloc(sarray, (sarray_len + offset) * sizeof(structName *)); 

Luego establece el tamaño:

 sarray_len += offset; 

Feliz de ayudar y esperar eso ayuda.

La función realloc se puede usar para hacer crecer o reducir una matriz. Cuando la matriz crece, las entradas existentes conservan su valor y las nuevas entradas no se inicializan. Esto puede crecer en el lugar, o si eso no fuera posible, puede asignar un nuevo bloque en otro lugar de la memoria (y detrás de las escenas, copiar todos los valores en el nuevo bloque y liberar el bloque anterior).

La forma más básica es:

 // array initially empty T *ptr = NULL; // change the size of the array ptr = realloc( ptr, new_element_count * sizeof *ptr ); if ( ptr == NULL ) { exit(EXIT_FAILURE); } 

La multiplicación se debe a que realloc espera una cantidad de bytes, pero siempre quiere que su matriz tenga la cantidad correcta de elementos. Tenga en cuenta que este patrón para realloc significa que no tiene que repetir T en cualquier lugar de su código que no sea la statement original de ptr .

Si desea que su progtwig pueda recuperarse de un error de asignación en lugar de exit , debe conservar el puntero antiguo en lugar de sobrescribirlo con NULL:

 T *new = realloc( ptr, new_element_count * sizeof *ptr ); if ( new == NULL ) { // do some error handling; it is still safe to keep using // ptr with the old element count } else { ptr = new; } 

Tenga en cuenta que la reducción de una matriz a través de realloc puede no devolver la memoria al sistema operativo; la memoria puede continuar siendo propiedad de su proceso y disponible para futuras llamadas a malloc o realloc .

De http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/

 /* realloc example: rememb-o-matic */ #include  #include  int main () { int input,n; int count=0; int * numbers = NULL; do { printf ("Enter an integer value (0 to end): "); scanf ("%d", &input); count++; numbers = (int*) realloc (numbers, count * sizeof(int)); if (numbers==NULL) { puts ("Error (re)allocating memory"); exit (1); } numbers[count-1]=input; } while (input!=0); printf ("Numbers entered: "); for (n=0;n