Punteros IIYa dijimos que podiamos manejar la memoria a voluntad, pero no lo dejamosmuy claro con ejemplos, ahora veamos e...
int **arreglo;arreglo=new *int[10];for (int i=0; i<=10;i++)    {       arreglo[i]=new int[10];     }Lo anterior genera una...
Luego cada uno de esos punteros de transformo en un arreglo de enteros detamaño 10.Entonces para poder liberar esa memoria...
Upcoming SlideShare
Loading in...5
×

Punteros4

338

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
338
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Punteros4

  1. 1. Punteros IIYa dijimos que podiamos manejar la memoria a voluntad, pero no lo dejamosmuy claro con ejemplos, ahora veamos el manejo de memoria pidiendo yliberando esta.C tenia el comando malloc (memory allocate) y free, que pedian memoria yliberaba respectivamente. C++ incluye los comandos new y delete que facilitanmucho estos aspectos ejemplo://asumamos tenemos una estructura de datos llamada “Estructura”//Estructura *nuevaEstructura;nuevaEstructura=(Estructura)malloc(sizeof(Estructura));Lo anterior lo que hace es pedirle al sistema operativo un espacio en memoriaque tenga el tamaño de “Estructura” y luego le hace un cast a ese sector paraque se “comporte” como un objeto Estructura.Luego para liberar ese espacio:Free(nuevaEstructura);En cambio en C++ esto es mucho más sencillo, el mismo ejemplo anterior:Estructura *nuevaEstructura;nuevaEstructura=new Estructura;El comando new simplifica las cosas en cuanto a problemas de espacio a asignar.Ahora para liberar la memoria:delete nuevaEstructura;Veamos un ejemplo de cómo generar un arreglo de forma dinámica usandopunteros y los comandos new y delete
  2. 2. int **arreglo;arreglo=new *int[10];for (int i=0; i<=10;i++) { arreglo[i]=new int[10]; }Lo anterior genera una matriz de (10+1)x(10+1) elementos de tipo entero.Algo importantísimo que se debe tener en mente al estar trabajando con lamemoria de esta forma es que toda memoria pedida debe ser liberada, elsistema operativo no ocupara el sector asignado si no le pedimos que lo libere,así que cada vez que ya no se necesite la memoria almacenada es buenoliberarla para, de esta forma, no hacer que la memoria ram se acabe.Usando el mismo arreglo creado dinámicamente explicare como se libera:for (int i=0; i<=10;i++) { delete [] arreglo[i] ; }delete [] arreglo;Al crear dinámicamente una matriz lo que hicimos fue crear un arreglo depunteros de tipo entero, y en cada casilla de ese arreglo creamos un arreglo delargo 10: *0 *1 *2 . . . . *10
  3. 3. Luego cada uno de esos punteros de transformo en un arreglo de enteros detamaño 10.Entonces para poder liberar esa memoria debemos liberar la memoria indexadapor cada uno de esos punteros por eso esta el lazo iterativo:for (int i=0; i<=10;i++) { delete [] arreglo[i] ; }que lo que hace es ir liberando la memoria indexada de cada casilla del arreglo,luego de eso la sentencia:delete [] arreglo;libera la memoria almacenada en el arreglo de punteros, dejando la memorialiberada, lista para ser pedida por nosotros u otro programa corriendo en elbackground de nuestro entorno de trabajo.Nota:delete [] arreglo; indica libere la memoria que tiene estructura de arregloDespués de todo ese jugo les puedo decir que también se puede crear unarreglo de forma dinámica mucho mas simple, pero si no hubiese dado eseejemplo no hubiese sido tan explicativo no?, (aunque quizás se enredaron masaun, a mí me paso la primera vez que vi ese ejemplo).Int * arreglo;arreglo=new int[10][10];Lero 2005;

×