C/realloc

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


Esta función permite modificar dinamicamente o tamaño do espazo de memoria ao que sinala un punteiro, e crealo (é dicir, comportarse coma malloc()) en caso de que o punteiro teña valor nulo.

Ao contrario que no caso de malloc(), cando a realloc() se lle pasa por vez primeira un punteiro ao que non se lle asignou ningún bloque de memoria aínda, hai que asegurarse de que o valor de dito punteiro sexa NULL, para que a función saiba como ten que actuar. O máis doado é inicializar sempre os punteiros como NULL. Se o bloque de memoria ao que apunta o punteiro xa existe (por exemplo, se o creamos mediante a función malloc() previamente) non é necesario isto.

A súa sintaxe fundamental é a seguinte:

punteiro = (tipo da variable punteiro) realloc(punteiro, tamaño);

Esta sintaxe pode resultar algo complicada de comprender a primeira vista. Trátase de asignarlle a un punteiro un enderezo de memoria reservado pola función. Posto que realloc() devolve en principio un punteiro de tipo void (sen tipo), é preciso precisarlle á función un molde co tipo de punteiro correspondente ao punteiro que vai conter o enderezo do bloque de memoria reservado pola función. Asemade, a realloc() hai que pasarlle como argumentos o punteiro que vai conter o enderezo do bloque de memoria e mailo tamaño en bytes que vai conter dito bloque.

A mellor forma de comprendelo quizais sexa un exemplo:

// Declaración do punteiro
unsigned short int * punteiro=NULL;

// Asignación de 10 celas “unsigned short int” en memoria dinámica
punteiro = (unsigned short int *) realloc(punteiro, 10*sizeof(unsigned short int));

Ao contrario que malloc(), realloc() permite modificar de xeito dinámico o tamaño do punteiro, é dicir, ademais de reservar un bloque de memoria cuxo tamaño se decide en tempo de execución, esta función permite aumentar e diminuír o tamaño de dito bloque durante a execución. Isto é, se temos un punteiro sinalando un bloque de memoria cun certo tamaño, mediante esta función amplíase (ou redúcese) o devandito bloque de memoria ao tamaño fornecido á función. En caso de que non caiba no bloque de memoria actual (porque a continuación na memoria hai algún outro dato gardado), realloc() busca un novo bloque de memoria libre, onde garda os datos do bloque de memoria actual e reserva o espazo adicional necesario para termos o tamaño especificado á función.

A memoria dinámica débese liberar antes de saír do programa mediante a función free(), ou quedará reservada ata que se apague o computador onde se executou o programa.

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 sinala o fin da cadea.


C
← Volver a malloc realloc Seguir con strcmp