C/malloc

En Galilibros, o Wikibooks en galego.
< C
Saltar ata a navegación Saltar á procura
C
← Volver a free malloc Seguir con realloc


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[editar]

Ao 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.


C
← Volver a free malloc Seguir con realloc