Sign up with your email address to be the first to know about new products, VIP offers, blog features & more.

Reservar memoria dinámica para un vector en C

Puesto que estamos hablando bastante de C en el curso de programación de videojuegos con SDL, voy a publicar una serie de pequeños apuntes sobre programación en C que seguro que os son de utilidad. No van a constituir un curso como tal pero serán una serie de entradas relacionadas sobre este tema.

Memoria dinámica

Cuando trabajamos con variables, el compilador genera código máquina que se encarga de reservar memoria al comienzo de la ejecución y de liberarla al finalizar la misma. Cuando necesitamos trabajar con una serie de datos que no sabemos cuánto van a ocupar, por ejemplo con una estructura que variará con el número de jugadores de nuestro videojuego, no podemos reservar un vector (array o arreglo) para un número indeterminado.

Deberemos declarar un puntero y sobre dicho puntero, pedirle al sistema memoria suficiente conforme a nuestras necesidades. El sistema nos devolverá una dirección de memoria (que se almacenará en el puntero) y junto a la cuál (de forma correlativa) se encontrarán las demás posiciones del vector con el que vamos a trabajar.

malloc

La función que se encarga de efectuar ese trabajo es malloc (del inglés, reserva de memoria, memory allocation). Tras reservar memoria, deberemos hacer uso de free para liberarla cuando no la necesitemos más. Veamos qué parámetros maneja:

Entrada

  • tamaño: del tipo size_t, es decir, número de bytes que queremos reservar. Será número de elementos del vector multiplicado por el tamaño del tipo de dato (lo obtenemos con sizeof).

Salida

  • Dirección de memoria inicial del vector que se almacenará en un puntero. Es del tipo void* por lo que deberemos hacerle una conversión explícita o casting al tipo que queramos. Será NULL si ha habido problemas ejecutando malloc.

Ejemplo

  • Pingback: Bitacoras.com()

  • Javier pineda

    undefined variable ‘buffer’ o algo asi, hace un rato que no compilo en C.

    Pero excelente apunte hojala sigas con estas notas

  • DgMvEcuador

    bien, un poco de C para recordar buenos tiempos…

  • @Javier pineda: Gracias por comentarme la errata, ya está solucionado.

    @DgMvEcuador: Lo seguirás recordando con las próximas entregas de SDL y alguna otra como esta que se me “escape” 😉

  • Pingback: Reservar memoria dinámica para una matriz en C | Linux Hispano()

  • chuckSaldana

    Muy buen tip, hacia tiempo buscaba una manera de emular los objectos mutables de lenguajes como java en C. Gracias.

  • Pingback: Curso programación de videojuegos con SDL – Incluyendo enemigos | Linux Hispano()

  • jose

    Muchas gracias por tu código, me está sirviendo de mucho, pero tengo una duda, ¿para hacer una matriz de memoria dinámica como sería?Tenemos el tamaño de cada posición de la matriz, pero no el número de posiciones hasta que leamos por teclado.¿Qué debemos hacer?

    Es decir, matriz[x][5]
    x=número que leeremos por teclado

    Un saludo y muchas gracias

Leer entrada anterior
Lo mejor de mi RSS del 8 a 14 de agosto

Seguridad en Instalaciones - Parte 1: Seguridad Física - Security By Default Contenido con fecha de caducidad - Ayuda WordPress...

Cerrar