Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Organizacin
de la memoria
Memoria esttica
Memoria dinmica
Punteros
Tema 6: Memoria dinmica
Definicin y
declaracin Programacin 2
Direccin y
contenido
Declaracin con
inicializacin
Ejercicios
Uso de
punteros
Reserva y liberacin
de memoria
Punteros y vectores
Punteros definidos
Curso 2013-2014
con typedef
Punteros y registros
Parmetros de
funciones
Errores comunes
Ejercicios
ndice
Tema 6
Organizacin
de la memoria El tamao es fijo y se conoce al implementar el
Memoria esttica
Memoria dinmica programa
Punteros
Definicin y
Declaracin de variables
declaracin
Direccin y
contenido
int i=0;
Declaracin con char c;
inicializacin
Ejercicios float vf[3]={1.0, 2.0, 3.0};
Uso de
punteros
Reserva y liberacin
de memoria
i c vf[0] vf[1] vf[2]
Punteros y vectores 0 1.0 2.0 3.0
Punteros definidos
con typedef 1000 1002 1004 1006 1008
Punteros y registros
Parmetros de
funciones
Errores comunes
Ejercicios
Memoria dinmica
Tema 6
Organizacin
de la memoria
Memoria esttica
Memoria dinmica Normalmente se utiliza para almacenar grandes
Punteros volmenes de datos, cuya cantidad exacta se
Definicin y
declaracin desconoce al implementar el programa
Direccin y
contenido
Declaracin con La cantidad de datos a almacenar se calcula durante la
inicializacin
Ejercicios ejecucin del programa y puede cambiar
Uso de
punteros En C++ se puede hacer uso de la memoria dinmica
Reserva y liberacin
de memoria usando punteros
Punteros y vectores
Punteros definidos
con typedef
Punteros y registros
Parmetros de
funciones
Errores comunes
Ejercicios
Definicin y declaracin
Tema 6
Punteros
En la declaracin de un puntero, se debe especificar el
Definicin y
declaracin tipo de dato que contiene la direccin de memoria
Direccin y
contenido
Declaracin con
Se declaran usando el carcter *
inicializacin
Ejercicios Ejemplos:
Uso de
punteros int *punteroAEntero;
Reserva y liberacin
de memoria
char *punteroAChar;
Punteros y vectores int *VectorPunterosAEntero[tVECTOR];
Punteros definidos
con typedef double **punteroAPunteroAReal;
Punteros y registros
Parmetros de
funciones
Errores comunes
Ejercicios
Direccin y contenido
Tema 6
Punteros
Definicin y
declaracin
Ejemplo:
Direccin y
contenido
Declaracin con int i=3;
inicializacin
int *pi;
Ejercicios
pi=&i; // pi=direccion de memoria de i
Uso de
punteros *pi = 11; // contenido de pi=11. Por lo tanto, i = 11
Reserva y liberacin
de memoria
Punteros y vectores
Punteros definidos i pi
con typedef
Punteros y registros 11 1000
Parmetros de
funciones
1000 1002 1004 1006 1008
Errores comunes
Ejercicios
Declaracin con inicializacin
Tema 6
Organizacin
de la memoria Declaracin con inicializacin:
Memoria esttica
Memoria dinmica
int *pi=&i; // pi contiene la direccion de i
Punteros
Definicin y
declaracin
Direccin y
contenido
El puntero NULL es aquel que no apunta a ninguna
Declaracin con
inicializacin
variable
Ejercicios
Uso de
int *pi=NULL;
punteros
Reserva y liberacin
de memoria
Punteros y vectores
Precaucin: siempre que un puntero no tenga memoria
Punteros definidos
con typedef
asignada debe valer NULL.
Punteros y registros
Parmetros de
funciones
Errores comunes
Ejercicios
Ejercicios
Tema 6
Ejercicio 1
Indica cul sera la salida de los siguientes fragmentos de
Organizacin
de la memoria cdigo:
Memoria esttica
Memoria dinmica
int e1;
Punteros int *p1, *p2;
Definicin y
declaracin e1 = 7;
Direccin y
contenido
p1 = &e1;
Declaracin con p2 = p1;
inicializacin
Ejercicios
e1++;
(*p2) += e1;
Uso de
punteros cout << *p1;
Reserva y liberacin
de memoria
Punteros y vectores
Punteros definidos
con typedef
int a=7;
Punteros y registros int *p=&a;
Parmetros de
funciones
int **pp=&p;
Errores comunes cout << **pp;
Ejercicios
Reserva y liberacin de memoria (1/2)
Tema 6
Tema 6
Organizacin
Cuando se usa new, el compilador reserva memoria y
de la memoria devuelve la direccin de inicio de ese espacio
Memoria esttica
Memoria dinmica reservado
Punteros
Definicin y Si no hay suficiente memoria para la reserva, new
declaracin
Direccin y
contenido
devuelve NULL
Declaracin con
inicializacin Siempre que se reserva memoria con new hay que
Ejercicios
Uso de
liberarla con delete
punteros
Reserva y liberacin
Ojo: Tras hacer delete, el puntero no vale NULL por
de memoria
Punteros y vectores defecto
Punteros definidos
con typedef
Punteros y registros
Un puntero se puede reutilizar; tras liberar su contenido
Parmetros de
funciones se puede reservar memoria otra vez con new
Errores comunes
Ejercicios
Punteros y vectores (1/2)
Tema 6
Tema 6
Organizacin
de la memoria
Memoria esttica
Memoria dinmica
Los punteros se pueden usar como accesos directos a
Punteros componentes de vectores o matrices
Definicin y
declaracin
Direccin y
Ejemplo:
contenido
Declaracin con
inicializacin int v[tVECTOR];
Ejercicios int *pv;
Uso de pv = &(v[7]);
punteros *pv = 117; // v[7] = 117;
Reserva y liberacin
de memoria
Punteros y vectores
Punteros definidos
con typedef
Punteros y registros
Parmetros de
funciones
Errores comunes
Ejercicios
Punteros definidos con typedef
Tema 6
Tema 6
Organizacin
de la memoria Cuando un puntero referencia a un registro, se puede
Memoria esttica
Memoria dinmica usar el operador -> para acceder a sus campos
Punteros
Definicin y
declaracin
typedef struct {
Direccin y
contenido char c;
Declaracin con
inicializacin int i;
Ejercicios } Registro, *PunteroRegistro;
Uso de
punteros PunteroRegistro pr;
Reserva y liberacin
de memoria
pr = new Registro;
Punteros y vectores pr->c = a; // (*pr).c = a;
Punteros definidos
con typedef
Punteros y registros
Parmetros de
funciones
Errores comunes
Ejercicios
Parmetros de funciones (1/2)
Tema 6
Tema 6
Paso de parmetros a funciones usando typedef
Organizacin
de la memoria typedef int* PInt;
Memoria esttica
Memoria dinmica
void f (PInt p){ // Por valor
Punteros *p=2;
Definicin y
declaracin }
Direccin y
contenido
Declaracin con void f2 (PInt &p) { // Por referencia
inicializacin
Ejercicios
int num=10;
p=#
Uso de
punteros
}
Reserva y liberacin
de memoria
Punteros y vectores
int main() {
Punteros definidos int i=0;
con typedef
Punteros y registros
PInt p=&i;
Parmetros de f(p); // Llamada a funciones
funciones
Errores comunes
f2(p);
Ejercicios }
Errores comunes
Tema 6
Utilizar un puntero sin haberle asignado memoria o
apuntando a nada
Organizacin
de la memoria int *pEntero;
Memoria esttica
Memoria dinmica
*pEntero = 7; // Error !!!
Punteros
Definicin y
declaracin
Usar un puntero tras haberlo liberado
Direccin y
contenido
Declaracin con
punteroREGISTRO p,q;
inicializacin p = new REGISTRO;
Ejercicios
...
Uso de q = p;
punteros
delete p;
Reserva y liberacin
de memoria q->num =7; // Error !!!
Punteros y vectores
Punteros definidos
con typedef
Punteros y registros Liberar memoria no reservada
Parmetros de
funciones
Errores comunes int *p=&i;
Ejercicios delete p;
Ejercicios
Tema 6
Organizacin Ejercicio 2
de la memoria
Memoria esttica
Memoria dinmica
Dado el siguiente registro:
Punteros
Definicin y
typedef struct {
declaracin
char nombre[32];
Direccin y
contenido int edad;
Declaracin con
inicializacin
} Cliente;
Ejercicios