Até o presente momento vimos como
podemos criar estruturas para armazenamento de dados. Porém todas elas de
tamanho fixo, pré-definido quando declaramos as variáveis. Na Linguagem C
podemos criar novas variáveis em tempo de execução do programa, ou seja,
podemos alocar espaço na memória RAM do computador sempre que quisermos.
Para isso temos as funções malloc(),
callock, realock() e free(). Todas essas funções são da biblioteca stdlib.h.
Utilizaremos as funções malloc() e
free() neste caderno para trabalhar a alocação dinâmica de memória.
Função malloc() e free()
Estas são as funções que permitem a
alocação dinamicamente da memória e a liberação de espaços na memória. É
importante destacar que a função malloc() trabalha exclusivamente com ponteiros
e após a alocação de memória ele retorna um ponteiro para a nova variável. A sua
sintaxe é:
void *malloc (size_t numero_bytes);
O void é porque o ponteiro poderá ser
de qualquer tipo, inclusive uma struct. A expressão size_t se refere à
quantidade de bytes que queremos alocar na memória do computador. Esta
quantidade está diretamente relacionada com o tipo de variável que queremos
criar. Dessa forma, vejamos um exemplo de aplicação:
Ex:
int *pont;
pont = malloc(8);
Obs: se não houver espaço livre na
memória, malloc retorna um endereço nulo (representado por NULL, definido em
stdlib.h) que pode ser testado para encerrar o programa por falta de espaço em
memória para alocação.
Quando não sabemos quantos bytes
queremos alocar na memória, mas sabemos que queremos alocar para um tipo
específico de dado, usamos a função sizeof(tipo_dado). Vejamos o exemplo para
retornarmos um ponteiro para uma variável do tipo inteiro:
int *pont;
pont = malloc(sizeof(int));
Já a função free() serve para liberar a
memória alocada, deixando o espaço livre para ser usado. É bem simples o
processo, basta colocar o nome da variável criada dentro da função free().
Vejamos:
int *pont;
pont = malloc(sizeof(int)); free(pont);