Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sumario:
- Asignacin dinmica de memoria.
o Sintaxis de C, funcin malloc.
o Sintaxis de C++, operador new.
- Introduccin bsica a las excepciones.
Bibliografa
Texto: Como programar en C++, Tomo II pg 470-471.
Texto: Como programar en C++, Tomo II pg 576-579.
Objetivos:
Que el estudiante conozca el concepto de memoria dinmica y lo aplique utilizando la
sintaxis de los lenguajes C y C++.
Que el estudiante conozca los operadores de manejo de excepciones try catch y los utilice
para gestionar el proceso de peticin de memoria dinmica.
Introduccin
La asignacin de la memoria para las variables no es responsabilidad del programador.
La memoria de las variables estticas y globales (cuando comienza el programa),
Las variables locales, se les asigna la memoria, pero cuando comienza a ejecutarse el
bloque en la que estn definidas.
Problemas:
- La memoria asignada a los programas puede ser insuficiente en aplicaciones
complejas.
- No se puede cambiar el tamao de los arreglos una vez creados.
- El tamao de los arreglos debe ser creado usando una constante.
Solucin:
- Asignacin dinmica de la memoria.
Desarrollo
1. Asignacin dinmica de memoria.
A estos pedidos de memoria que realiza el programador es a lo que llamaremos asignacin
dinmica de memoria.
Conf # 2 Pg 1 de 6
En C y C++
#include <alloc.h>
typedef unsigned size_t
void* malloc(size_t size);
T *ptr ;
ptr = (T*)malloc(sizeof(T));
Si existe suficiente memoria, una vez que se ejecute esta ltima instruccin, en la variable
ptr se copiar la direccin de la variable de tipo T, esquemticamente tendremos:
Observaciones:
no poseen un identificador propio, tendremos que referirnos a travs de un puntero que
contenga su direccin.
El caso de malloc debe hacerse un cast al tipo adecuado, debido a que malloc devuelve
*void.
Utilizareemos el operador de indireccin aplicado al puntero, es decir *ptr.
Utilizando el operador de acceso a elemento de arreglo, o sea, con ptr[0].
Valor inicial (Solo con new) :
o ptr = new T ( To);
Conf # 2 Pg 2 de 6
En este caso tendremos que al crearse la variable dinmica ser inicializada con el valor To,
por lo que el contenido de lo apuntado por ptr ser el valor To, o sea:
Observe que con una instruccin como
T *ptr = new T (To) ;
<=>
T* ptr = new T ;
*ptr = To;
C y C++
Conf # 2 Pg 3 de 6
Debajo se muestra lo que ocurre si ejecutamos una asignacin de punteros o una asignacin
de lo apuntado por el puntero:
ptr1 = ptr2
= ptr2[0]
Lo correcto sera:
delete ptr1;
ptr1 = ptr2;
Free(ptr1);
ptr1 = ptr2;
Conf # 2 Pg 4 de 6
Ejemplo:
#include <iostream.h>
#include <conio.h>
#include <alloc.h>
void main(void){
unsigned short int n;
int *ptr;
int *ptr1;
printf("Deme la cantidad de elementos del arreglo a crearse: ");
scanf(%d, &n);
ptr=new int[n];
// ptr = (int *)malloc(5*sizeof(int));
ptr1=ptr;
if(ptr == NULL)
{
printf("No se pudo reservar memoria ");
exit(0);
}
for (int i=0;i<n;i++)
{
printf( "\nValor de elemento %d:",i);
scanf(%d, & ptr[i];);
}
float prom=0;
for (int i=0;i<n;i++,ptr1++)
prom+=(float) *ptr1/n;
printf ( "El promedio es: %f",prom);
printf ( \n sizeof(ptr) es: %d, sizeof(ptr));
getch();
delete [] ptr;
// free(ptr)
}
Conf # 2 Pg 5 de 6
1.6. Excepciones.
Las excepciones son situaciones anormales que requieren un tratamiento especial,
tienen por qu ser errores.
no
Funcionamiento:
Conf # 2 Pg 6 de 6