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
Salida
Ejemplo
#include <stdio.h> #include <stdlib.h> int main () { int numeroElementos; int* vector; printf ("¿Cuántos elementos quieres? "); scanf ("%d", &numeroElementos); vector = (int*)malloc(numeroElementos*sizeof(int)); if (vector==NULL) { perror("Problemas reservando memoria"); exit (1); } // trabajamos con el vector // lo liberamos free (vector); return 0; }
https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.
Ver comentarios
undefined variable 'buffer' o algo asi, hace un rato que no compilo en C.
Pero excelente apunte hojala sigas con estas notas
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" ;)
Muy buen tip, hacia tiempo buscaba una manera de emular los objectos mutables de lenguajes como java en C. Gracias.
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