Ir para o conteúdo
ou

Software livre Brasil

0 comunidades

Nenhum(a)

Felipe da Silva Braz

Apresentações

 Voltar a Blog
Tela cheia

Alocação Dinâmica de Vetores em Linguagem C

17 de Novembro de 2016, 20:47 , por Felipe da Silva Braz - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 16 vezes
Licenciado sob GNU FDL

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

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.