Quando declaramos um vetor, nós informamos o seu tamanho. Para isso temos que saber o espaço máximo que seria necessário, mas em alguns programas isso pode não ser tão fácil de prever de antemão, o que pode limitar ou gerar um consumo desnecessário de memória pelo programa. Para evitar este tipo de problema, a Linguagem C oferece a possibilidade de alocar a memória dinamicamente, ou seja, ele consegue consultar em tempo de execução qual o espaço que será necessário para o vetor.
Na biblioteca stdlib tem funções que permitem liberar e alocar memória dinamicamente. A função mais básica para alocar a memória é malloc que recebe como parâmetro o número de bytes que será necessário e retorna o endereço de memória. Voltando no assunto de ponteiros, como o comando retorna um endereço de memória, então basta atribuir o endereço para um ponteiro e depois usá-lo como vetor. Lembrando, com já foi visto em posts anteriores, que vetores são na verdade ponteiros.
Vamos ver agora um trecho de código:
int *v;
v=malloc(10*4);
Nesse trecho de código, foi criado um ponteiro e depois ele recebeu o endereço de memória com o tamanho de 10 vezes 4 bytes, ou seja, seria a mesma coisa que tivesse declarado o comando: int v[10]. Aí você pode estar se perguntando: Se 4 bytes é por causa do tamanho da variável do tipo int, então eu tenho que memorizar o tamanho de todos tipos de variáveis? A resposta é não. Para isso você tem a função sizeof() que pega o valor automaticamente para você. Então código ficaria assim:
int *v;
v = malloc(10*sizeof(int));
Agora se você quer liberar o espaço de memória, basta colocar o comando:
free(v);
Pronto! Agora você já sabe como alocar dinamicamente vetores.
0sem comentários ainda