con clase array c struct malloc realloc

clase - malloc vs calloc



realloc dentro de un realloc (1)

En C, ¿puedes tener realloc dentro de realloc? Por ejemplo, una estructura dentro de una estructura cuando necesita malloc ambos y reasignarlos a ambos. Si es así, ¿alguien puede dar un ejemplo simple? Gracias de antemano.


Tu pregunta no es terriblemente clara, pero ...

Sí, una determinada estructura asignada dinámicamente (por ejemplo, una matriz de estructuras) puede contener punteros a los datos asignados (como varias otras matrices de estructuras asignadas), y puede reasignar las distintas partes de forma independiente.

Sin embargo, el sistema no llamará a realloc() mientras esté reasignando una de las estructuras; Tendría que programar por separado las diversas operaciones de cambio de tamaño.

Ejemplo de estructuras de datos anidados:

struct line { char *info; size_t length; }; struct section { size_t num_lines; struct line *lines; };

Puede asignar una matriz de secciones y reasignar esa matriz cuando sea necesario. Cada sección contiene una matriz de líneas, y cada una de esas matrices de líneas también se puede reasignar de forma independiente.

Por lo tanto:

size_t num_sections = 0; size_t max_sections = 0; struct section *sections = 0; if (num_sections == max_sections) { size_t new_max = (max_sections + 1) * 2; struct section *new_sections; if (sections == 0) new_sections = malloc(new_max * sizeof(*new_sections)); else new_sections = realloc(sections, new_max * sizeof(*new_sections)); if (new_sections == 0) ...out of memory error... sections = new_sections; max_sections = new_max; } struct section *section = &sections[num_sections++]; // Newly available section section->num_lines = 0; section->lines = 0; return section;

(Estoy asumiendo C99 - con declaraciones variables donde los quiero).

Se aplica un proceso similar para la matriz de líneas dentro de una sección, excepto que la estructura de la sección no tiene valores separados para la cantidad de líneas asignadas y el número de líneas actualmente en uso. Cada línea también tiene su propia memoria asignada para la cadena de caracteres, por supuesto ...