La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Memoria dinámica con Estructuras. Memoria dinámica ¿Qué hacer cuando las variables declaradas son insuficientes o cuando no se conoce anticipadamente.

Presentaciones similares


Presentación del tema: "Memoria dinámica con Estructuras. Memoria dinámica ¿Qué hacer cuando las variables declaradas son insuficientes o cuando no se conoce anticipadamente."— Transcripción de la presentación:

1 Memoria dinámica con Estructuras

2 Memoria dinámica ¿Qué hacer cuando las variables declaradas son insuficientes o cuando no se conoce anticipadamente cuanto almacenamiento será requerido por el programa? 1. Se crea una variable de tipo puntero. 2. Se le pide al sistema operativo que asigne más memoria. 3. El sistema operativo retorna la dirección a la memoria asignada. 4. Si la memoria asignada, no se usará más, se puede devolver al sistema operativo.

3 Memoria estática/dinámica 1 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; } xp a b NULL

4 Memoria estática/dinámica 2 struct str { int x; struct str *p; }; main(){ // se crea la variable estructurada estatica, "a" que tiene memoria asignada, // la relacion entre el nombre "a" y la memoria asignada es permanente: struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; } xp a b NULL

5 Memoria estática/dinámica 3 struct str { int x; struct str *p; }; main(){ struct str a; // se crea la variable de tipo puntero "b" para apuntar a variables estructuradas, // no hay memoria asignada de tipo estructurada, "b" apunta a nada: struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; } xp a b NULL

6 Memoria estática/dinámica 4 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; // se puede modificar u obtener el contenido de los campos de la variable "a", // para ello se debe usar "." seguida del nombre del campo: a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; } xp a b NULL 55

7 Memoria estática/dinámica 5 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; // se pide, al sistema operativo, memoria para una variable estructurada, // la variable puntero "b" es usada para almacenar la direccion de la nueva // memoria devuelta, esto significa que “b” queda apuntando a esta nueva // variable estructurada: b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; } xp a 55 xp b NULL

8 Memoria estática/dinámica 6 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; // se pide, al sistema operativo, memoria para una variable estructurada, // la variable puntero "b" es usada para almacenar la direccion de la nueva // memoria devuelta, esto significa que “b” queda apuntando a esta nueva // variable estructurada: b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; } xp a 55 xp b NULL

9 Memoria estática/dinámica 7 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); / / para acceder a los campos de la variable estructurada se debe usar "->" // en vez de “.”: b->x=66; a.x=a.x+b->x; } xp a b NULL 55 xp 66

10 Memoria estática/dinámica 8 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); / / para acceder a los campos de la variable estructurada se debe usar "->" // en vez de “.”: b->x=66; a.x=a.x+b->x; } xp a b NULL 121 xp 66

11 Memoria estática/dinámica 9 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; // si la variable de tipo puntero se hace apuntar a otra variable estructurada // por ejemplo a "a", la variable estructurada, pedida en forma dinamica, // queda sin la posibilidad de ser usada por el programa: b=&a; } xp a NULL 55 xp 66 b

12 Memoria estática/dinámica 10 struct str { int x; struct str *p; }; main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x; // la forma correcta es devolver dinamicamente la memoria: free(b); b=&a; } xp a 55 NULL xp 66 b


Descargar ppt "Memoria dinámica con Estructuras. Memoria dinámica ¿Qué hacer cuando las variables declaradas son insuficientes o cuando no se conoce anticipadamente."

Presentaciones similares


Anuncios Google