Alocação de Memória
A alocação dinâmica permite para o programador alocar a memória para variáveis quando o programa está sendo executado. Assim, pode-se definir, por exemplo, um vetor ou uma matriz cujo tamanho é definido em tempo de execução.
Existem diversas outras funções que são amplamentes utilizadas, mas dependentes do ambiente e compilador. No entanto, o padrão ANSI C define apenas quatro funções para o sistema de alocação dinâmica, disponíveis no arquivo de cabeçalho stdlib.h, e descritas a seguir.
FUNÇÃO MALLOC ()
A função malloc () serve para alocar um espaço de memória. Sua sintaxe geral é: ptr = malloc (num);
Esta função aloca na memória o número de bytes definido por num. Ela retorna um ponteiro ptr do tipo void* para o primeiro byte alocado. Este ponteiro pode ser atribuído a qualquer tipo de ponteiro. Se não houver memória suficiente para a alocação requisitada, a função retorna um ponteiro nulo (NULL).
Veja um exemplo de alocação dinâmica com malloc ().
# include
#include /* Para usar malloc () */ void main (void)
{
int *p; int a, i; a = 100; /* O comando abaixo atribui ao ponteiro p o espaço necessário para guardar a Nº inteiros, assim, p agora pode ser tratado como um vetor com 100 posições */ p = (Int*) malloc (a*sizeof(Int)); if (!p) { printf(“** Erro: Memoria Insuficiente **”); exit; } for (i = 0; i < a; i++) p[i] = i*i;
}
No exemplo acima, é alocada memória suficiente para se armazenar a números inteiros. O operador sizeof () retorna o número de bytes de um inteiro. Ele é útil para se saber o tamanho de tipos. O ponteiro void* que malloc () retorna é convertido para um Int* pelo operador cast e é atribuído a p. O comando seguinte testa se a operação foi bem sucedida. Se não tiver sido, p terá um valor nulo, portanto, !p será verdadeiro. Se a operação tiver sido bem sucedida, podemos usar o vetor de inteiros alocados normalmente, por exemplo, indexando-o de p[0]