Existem três maneiras de se reservar espaço de memória para
o armazenamento de informações:

Uso de variáveis globais – o espaço reservado existe enquanto
o programa estiver sendo executado.
Uso de variáveis locais – o espaço reservado existe apenas
enquanto a função que declarou a variável está sendo
executada.
Reservar um espaço na memória dinamicamente: requisitar ao
sistema, em tempo de execução, um espaço de um
determinado tamanho.

A função malloc:

 

  • Recebe como parâmetro o número de bytes que se deseja alocar.
  • Retorna o endereço inicial da área de memória alocada.

Alocação dinâmica de um vetor de inteiros com 10 elementos, exemplo:

Se a alocação for bem sucedida, ‘v’ armazenará o endereço inicial de uma área contínua de memória suficiente para armazenar 10 valores inteiros.

Operador sizeof(tipo) retorna o número de bytes que um
dado tipo ocupa na memória.

Exemplo esquemático do que ocorre na memória:

Se não houver espaço livre suficiente para realizar a alocação,
a função malloc retorna um endereço nulo (NULL).

A liberação do espaço alocado dinamicamente é feito através do uso da função ‘free()’, que recebe como parâmetro o ponteiro da memória a ser liberada.

OBS:

  • Só devemos passar para a função free um endereço de memória que tenha sido alocado dinamicamente.

 

  • Uma vez liberado o espaço de memória alocado, o mesmo não pode mais ser acessado.
  • Enquanto a função free não for utilizada, o espaço alocado dinamicamente permanecerá válido mesmo após o término de uma dada função.