C/malloc
malloc()
permite establecer en tempo de execución o tamaño dunha variable, ou máis concretamente, definir en tempo de execución un bloque de memoria de calquera tamaño.
A función recibe un número, que interpretará como a cantidade de bytes a reservar en memoria dinámica, e devolve un punteiro que sinala ao espazo de memoria reservado. Ao chamar á función hai que precedela dun molde no que se indique o tipo de dato do punteiro.
Sabendo a cantidade de celas que queremos e o tipo de que as queremos, o cálculo do número de bytes (que pode definirse en tempo de execución) será o resultado desta sinxela operación:
celas*sizeof(tipo);
Visto isto, cómpre, para despexar toda dúbida, vermos a sintaxe fundamental dunha chamada a esta función:
punteiro = (tipo) malloc(cantidade * sizeof(tipo));
Por suposto, a variable punteiro terá que declararse previamente, e o tipo de dato con que a declaremos coincidirá co tipo
que aparece dúas veces na chamada anterior. Asemade, cantidade
será a cantidade de celas que se queiran reservar en memoria do tipo tipo
.
malloc()
devolverá NULL
en caso de que non sexa capaz de reservar en memoria o espazo que se lle pediu, ou que este espazo fose 0
. Deste xeito, pódese utilizar o punteiro ─o seu valor─ para detectar cando houbo un problema ao reservar espazo en memoria, é dicir, cando o valor do punteiro (despois da función) sexa nulo.
Unha vez rematamos co espazo de memoria reservado mediante malloc() ─é dicir, que non o imos usar máis no código─, convén liberar dito espazo. En calquera caso, débese liberar o espazo antes de rematar a execución do programa, ou dito espazo quedará inservible ata que se reinicie o equipo. Para liberar este espazo, utilízase a función free()
.
Cadeas de caracteres
editarAo reservar espazo en memoria para unha cadea, cómpre lembrar que fai falla un carácter adicional para o \0
(carácter nulo) que pecha a cadea.