La función realloc
se puede utilizar para aumentar 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 realloc
espera un número de bytes, pero siempre quiere que su matriz para tener el número correcto de elementos. Tenga en cuenta que este patrón para realloc
significa que no tiene que repetir T
en ningún lugar de su código que no sea la declaración original de ptr
.
si desea que su programa sea capaz de recuperarse de un error de asignación en vez de hacer exit
entonces usted necesita para mantener el puntero de edad en lugar de sobrescribir 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 realloc
puede que no devuelva la memoria al sistema operativo; la memoria puede continuar siendo propiedad de su proceso y disponible para futuras llamadas al malloc
o al realloc
.
Por favor, publique el código que ha escrito hasta ahora. En general, a la gente no le gusta escribir tu código por ti. –
Por ejemplo: matriz dinámica de estructuras en C: http://stackoverflow.com/questions/260915/dynamic-array-of-structs-in-c –
¿Qué hay del primer hit de google http://www.cplusplus.com/reference/clibrary/cstdlib/realloc /? ¿Qué has intentado hasta ahora? –