Você está na página 1de 7

Alocação Dinâmica

 Até agora, na declaração de um vetor, devemos saber de antemão sua


dimensão. Ou seja, o vetor tem sua dimensão pré-definida. Isso é um fator
limitante em situações em que não sabemos previamente a quantidade de
dados a ser armazenados.
EXEMPLO:
Desenvolver um programa para calcular a média e a variância das notas de uma prova de Cálculo I.
Teremos que prever quantos alunos fizeram essa prova.

Podemos imaginar em:


Dimensionar o vetor com um
número absurdamente alto.

Desperdício de memória

Alocação dinâmica
Funções da Biblioteca Padrão
 Existem funções, presentes na biblioteca padrão stdlib, que permitem
alocar e liberar memória dinamicamente.

malloc

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

int *v; int *v;


ou
v = malloc(10*4); v = malloc(10*sizeof(int));

Operador utilizado para independência


de compiladores e máquinas.
Função Malloc
 a função malloc é usada para alocar espaço para armazenarmos valores
de qualquer tipo. Por este motivo, malloc retorna um ponteiro genérico,
para um tipo qualquer, representado por void*.

mas

É comum fazermos a conversão explicitamente, utilizando o operador de molde de tipo (cast).

int *v;
v = (int*) malloc(10*sizeof(int));
Espaço de Memória
 E se não houver espaço livre suficiente para realizar a alocação ?

A função retorna um endereço nulo, representado pelo símbolo NULL

Erro de Alocação!!

Solução

stdlib.h
Função Free
 Para liberar um espaço de memória alocado dinamicamente, usamos a
função free. Esta função recebe como parâmetro o ponteiro da memória a
ser liberada.

free (v)

Atenção!!

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

Não podemos acessar o espaço na memória depois que o liberamos.


Exemplo
Realocação de Memória
 Como realocar memória ?

E para que serve isso ?

Você também pode gostar