realloc dans un realloc

En C, pouvez-vous avoir realloc dans realloc? Par exemple, une structure dans une structure lorsque vous devez mallocer les deux et les réaffecter. Si oui, quelqu’un peut-il fournir un exemple simple? Merci d’avance.

Votre question n’est pas terriblement claire, mais …

Oui, une structure allouée dynamicment (par exemple, un tableau de structures) peut elle-même contenir des pointeurs vers des données allouées (tels que divers autres tableaux de structures allouées) et vous pouvez réaffecter les différentes pièces indépendamment.

Cependant, le système n’appelle pas realloc() pour vous pendant que vous réaffectez l’une des structures; vous devez programmer séparément les différentes opérations de redimensionnement.

Exemple de structures de données nestedes:

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

Vous pouvez allouer un tableau de sections et réaffecter ce tableau si nécessaire. Chaque section contient un tableau de lignes, et chacun de ces tableaux peut également être réaffecté indépendamment.


Par conséquent:

 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; 

(J’assume C99 – avec des déclarations de variables où je les veux.)

Un processus similaire s’applique au tableau de lignes d’une section, à la différence que la structure de la section n’a pas de valeur distincte pour le nombre de lignes atsortingbuées et le nombre de lignes réellement utilisées. Chaque ligne possède également sa propre mémoire allouée pour la chaîne de caractères, bien sûr …