Memoria Dinamica En C
Herman Schinca
Clase 13
10 de Mayo de 2011
Reflexiones Preliminares
Hasta ahora trabajamos con variables cuyo
tamaño en memoria conocemos:
Char
→ 1 byte
Int
→ 4 bytes
Float→ 4 bytes
Double → 8 bytes
Int arr[20] → ? bytes
Reflexiones Preliminares
¿En todo programa conocemos TODA la
información que vamos a necesitar
de antemano?
¿Hay ejemplos en donde esto noocurra?
Reflexiones Preliminares
Sí.
Ejemplo: Encontrar el máximo número dentro de
un conjunto de números ingresado por el usuario.
A priori no sabemos cuántos números deseará
ingresar por lo que ello sedecidirá dinámicamente
en tiempo de ejecución.
Reflexiones Preliminares
¿Se les ocurre alguna forma de resolverlo con lo
que ya conocen?
Solución: Memoria Dinámica
Debo, en tiempo de ejecución,indicarle al
Sistema Operativo que voy a precisar más
memoria y cuánta.
malloc: Memory Allocation
Allocation = Asignación
Allocation ≠ Alocar
Alocar = Causar locura
Luego, la memoria no se aloca.malloc: Aridad
void* malloc(cantBytes)
Se le piden cantBytes al SO. Devuelve un puntero
a donde comienza dicha memoria o NULL sino.
Nota: Debo castear void al tipo de datos al que va
a apuntar elpuntero.
malloc: Ejemplo
int cant;
scanf("%d",&cant);
int* arr;
arr = (int*) malloc(cant*sizeof(int));
int i;
for(i=0; i
}
malloc: Ejemplo
¿Y eso es todo?
No, debochequear que obtuve dicha memoria o
informar de lo contrario (no es obligatorio mas sí
muy conveniente).
malloc: Ejemplo
...
int* arr;
arr = (int*) malloc(cant*sizeof(int));
loquito!”);if(arr==NULL){
printf(“Zarpaste en memoria,
}
...
exit(EXIT_FAILURE);
malloc: Ejemplo
Bueno, ahora sí, eso es todo... ¿No?
Claramente no.
Cuando no uso más esa memoria obtenida
dinámicamente, debo“devolverla” pues la “pedí
prestada”.
free: Libérala Hermano!
free(arr)
Libera la memoria asignada al puntero arr.
Matrices
¡Arreglo de arreglos!
Cada uno puede tener distinto tamaño.
Luego, más...
Regístrate para leer el documento completo.