#include <stdio.h>
#include <stdlib.h>
typedef struct tipo_interior {
int *pint;
} interior;
typedef struct {
interior *pinterior;
} exterior;
int main() {
int entero = 1;
exterior e;
e.
pinterior = malloc(sizeof(interior
)); e.pinterior->pint = &entero;
printf("%d", *e.
pinterior->pint
);
}
e existe en la pila, por lo tanto es un dato que C trata automáticamente.
e.pinterior sólo es un puntero, para poder usar la estructura hay que dimensionarla en algún sitio. Cómo no se hace en la pila hay que llamar a malloc para que la dimensione en el montón. Al hacerlo de esa forma es responsabilidad del programador liberarla. Eso es lo que hace free(e.pinterior).
entero existe en la pila y cómo pasa con e C lo trata de forma automática.
e.pinterior->pint apunta a entero, por tanto y cómo ya existe (tiene dimensión) no hay que hacer nada. En estos casos lo que se debe procurar es que un puntero apunte a una de estas variables que C va a liberar automáticamente, que esta desaparezca pero siga existiendo el puntero, que ahora apuntaría a una zona de memoria sin dimensionar.
Muchas gracias , pero tengo una pequeña duda, ¿esto siempre ocurre cuando tienes una estructura tipo puntero dentro de una misma?