Está en la página 1de 1

Tema 2: API de memoria.

1. Tipos de memoria
Hay 2 tipos de memoria en C:

➢ Stack, memoria de corta duración, cuya asignación y designación se hace


implícitamente por el compilador, por ello también se pueden conocer como
automático de memoria.
o Ejemplo: llamar a una función en C.
➢ Heap, es una memoria de larga duración, cuya asignación y designación la hace el
programador mediante un malloc.
o Ejemplo: int *x= (int*) malloc(sizeof(int));

2. La llamada a malloc().
La llamada a malloc() se hace pasándole un tamaño para pedir espacio en heap y si tiene éxito
devuelve el puntero, sino devuelve NULL. Se debe de llamar a <stdlib.h>.

El único parámetro del malloc es de tipo sizeof() que nos dice cuántos bytes son necesarios, o
strlen(s)+1 para reservar el espacio para un String de un tamaño igual a “s” y el +1 para que
entre el fin de cadena.

➢ Si llamamos a malloc() solo con sizeof() estamos creando un espacio para el tipo que
introduzcamos en el interior.
➢ Si llamamos a malloc() con sizeof()*n estamos creando n espacios para el tipo que
introduzcamos en el interior.

Devuelve un puntero de tipo void al que hay que hacer un casting.

3. La llamada a free().
Free() permite liberar memoria previamente reservada con malloc().

Calloc(): sirve para reservar memoria e inicializarla a 0.

Realloc(): reserva una nueva región de memoria y traslada a ella los datos del malloc.

Mmap(): crea una región de memoria anónima.

4. Errores comunes al usar memorias dinámicas (heap).


➢ Segmentation fault: no se ha reservado bien la memoria.
➢ Buffer overflow: no se ha reservado suficiente memoria.
➢ Unitialize read: no se ha inicializado una memoria reservada.
➢ Memory leak: no se ha liberado memoria reservada.
➢ Dangling pointer: se libera memoria antes de lo debido.
➢ Double free: se libera memoria más de una vez
➢ Invalid frees: se indica una región a liberar no válida.

También podría gustarte