Programaci - PowerPoint PPT Presentation

1 / 14
About This Presentation
Title:

Programaci

Description:

Programaci n III Clase 10 Apuntadores & Memoria Din mica – PowerPoint PPT presentation

Number of Views:87
Avg rating:3.0/5.0
Slides: 15
Provided by: Carlos389
Category:

less

Transcript and Presenter's Notes

Title: Programaci


1
Programación III
  • Clase 10
  • Apuntadores Memoria Dinámica

2
Operadores para uso de Memoria Dinámica
Operador Significado
new type Reserva en memoria espacio para un objeto de tipo type y retorna su dirección
delete ptr Libera la memoria del objeto al que apunta ptr
new typeexpr Crea un arreglo de type de tamaño de expr
delete ptr Libera la memoria del arreglo al que apunta ptr
3
Ejemplo de Memoria Dinámica
  • int pInt new int
  • pInt 17
  • cout ltlt pIntltlt endl
  • cout ltlt pIntltltendl
  • delete pInt

HS
17
SS / DS
0x4CD0
17
0x4CD0
4
Ahora, para crear arreglos dinámicos
HS
  • int size 3
  • float fp NULL
  • fp new floatsize
  • for(int i0iltsizei)
  • fpi 2 i
  • ...
  • delete fp

0
4
1
SS / DS
0x4CD0
5
Acerca del operador delete
  • Se deben de tener ciertos cuidados con el uso del
    operador delete
  • Debe de estar seguro que se le está aplicando a
    una dirección de memoria previamente reservada en
    el Heap.
  • Debe de estar seguro que no tenga el valor de
    NULL la variable.
  • De no seguir estas indicaciones, el programa
    terminará incorrectamente.
  • La segunda condición es fácil de validar, sin
    embargo el evitar caer en la primera es
    responsabilidad del programador.

6
Ejemplo Validación
  • if (ptr)
  • delete ptr
  • De esta manera se asegura que ptr no esté en NULL
    antes de intentar ejecutar el delete.

7
El Ámbito de la Memoria Dinámica
  • A diferencia de las variables locales o globales,
    las variables que residen en memoria dinámica no
    mueren al finalizar su ámbito, sino que mueren
    exclusivamente al llamar al operador delete sobre
    la dirección de memoria donde se encuentran.
  • Es por esto que se dice que trascienden del
    ámbito.

8
Demostración
  • double createArray(int s)
  • double retVal NULL
  • retVal new doubles
  • return retVal
  • ...
  • double pd createArray(3)

SS / DS
0x4CD0
HS
0x4CD0
0x4CD0
9
Y Los arreglos multidimensionales?
  • En el caso de los arreglos multidimensionales
    dinámicos, tendremos que comprender primero
    ciertos aspectos de cómo se representan tanto
    físicamente cómo lógicamente para el compilador.
  • Lo primero que hay que tener claro es que TODOS
    los arreglos, así como TODOS los objetos de un
    programa son guardados en la memoria en la forma
    de un arreglo unidimensional.

10
Representación de un Arreglo Bidimensional
(Física y Lógica)
  • int a23 1,3,5, 2,4,6

Representación Física
Representación Lógica
a
a
5
4
4
6
2
4
6
6
Nótese que la representación lógica, es en sí un
arreglo de arreglos, donde a es de tipo int y
a0, a1 son de tipo int
11
Y, Dinámicamente?
  • Comprendiendo que un arreglo bidimensional es
    representado en realidad por un arreglo de
    punteros de la primera dimensión, que a su vez
    apuntan, cada uno, a un arreglo de la segunda
    dimensión podemos crear el procedimiento para la
    creación dinámica de una matriz

12
Código de Creación y Destrucción de Arreglos
Bidimensionales
  • // Estos valores pueden ser introducidos
  • // en tiempo de ejecución
  • int rows 2, cols 3
  • float matrix
  • // Se crea el arreglo de punteros
  • matrix new floatrows
  • for (int i0 iltrows i)
  • matrixi new floatcols

13
Acerca del Tamaño de los Punteros
  • El tamaño de los punteros depende directamente de
    la cantidad de memoria que se desé direccionar.
  • Por ejemplo si sólo necesitamos direccionar 256
    bytes, entonces nuestros punteros serían de 1
    byte. Si quisieramos direccionar 64KB (65536
    Bytes) entonces nuestros punteros serían de 2
    bytes.
  • El tamaño de los punteros es independiente del
    tamaño del objeto al que apuntan. (Probar
    comparar los tamaños de punteros a char, y
    punteros a long double)

14
Retomando Ámbito y Tiempo de Vida
  • Los Objetos Nacen
  • En el momento de su declaración
  • En el momento que se crean dinámicamente
  • Los Objetos Mueren
  • En el momento que se acaba su ámbito
  • En el momento que se liberan (delete)
Write a Comment
User Comments (0)
About PowerShow.com