Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porLidia Jiménez de la Fuente Modificado hace 8 años
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
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.