Sistema

Disponível somente no TrabalhosFeitos
  • Páginas : 5 (1089 palavras )
  • Download(s) : 0
  • Publicado : 12 de outubro de 2012
Ler documento completo
Amostra do texto
Alocação dinâmica
Prof. Luciana Rocha Cardoso
A alocação dinâmica é o processo que aloca memória em tempo de execução. Ela é utilizada quando não
se sabe ao certo quanto de memória será necessário para o armazenamento das informações, podendo ser
determinadas em tempo de execução conforme a necessidade do programa. Dessa forma evita-se o desperdício
de memória.
No padrão C ANSI existem 4funções para alocações dinâmica pertencentes a biblioteca stdlib.h. São
elas malloc(), calloc(), realloc() e free(). Sendo que as mais utilizadas são as funções malloc() e free(). Além
das funções mencionadas acima existem outras que não serão abordadas neste tutorial, pois não são funções
padrões.
A alocação dinâmica é muito utilizada em problemas de estrutura de dados, por exemplo, listasencadeadas, pilhas, filas, arvores binárias e grafos. As funções malloc() e calloc() são responsáveis por alocar
memória, a realloc() por realocar a memória e por ultimo a free() fica responsável por liberar a memória
alocada.
A sintaxe da função malloc() é dada por:

Esta função recebe como parâmetro “size” que é o número de bytes de memória que se deseja alocar. O
tipo size_t é definido emstdlib.h como sendo um inteiro sem sinal. O interessante é que esta função retorna um
ponteiro do tipo void podendo assim ser atribuído a qualquer tipo de ponteiro.
No exemplo abaixo, suponha que seja necessário no meio do código alocar uma memória com 150
bytes, para isto seria necessário digitar as seguintes linhas de código:

No programa abaixo podemos verificar alguns problemas que podemser facilmente resolvidos se
tivéssemos utilizado alocação dinâmica.

O exemplo acima é muito simples, mas demonstra em que situação deve utilizar alocação dinâmica.
Analisando o programa mostrado vemos que não se sabe a quantidade de valores que a pessoa vai inserir no
vetor por esse motivo declaramos um vetor muito grande. O problema está se a pessoa, por exemplo, deseja
colocar apenas 3elementos no vetor. Como o vetor foi declarado com o tamanho igual a 100, o que acontece é
o desperdício de memória e caso passe de 100 haverá um estouro. Portanto a melhor solução seria utilizar
alocação dinâmica, ou seja, toda vez que não se sabe ao certo a quantidade de elementos a serem utilizados
deve-se utilizar a alocação dinâmica.
O mesmo exemplo mostrado anteriormente com o uso dealocação dinâmica (usando a função malloc() )
é mostrado logo abaixo:

Agora o usuário pode digitar o tamanho do vetor que quiser que não terá desperdício de memória e o
vetor a ser alocado será do tamanho digitado pelo usuário.
A função malloc() utilizada no programa acima, cuja a sintaxe foi mostrada, devolve um ponteiro do
tipo void, desta forma pode-se ser atribuído a qualquer tipo de ponteiro(no nosso exemplo é atribuído a um
ponteiro do tipo inteiro). A memória alocada pela função malloc(), como também por outras funções que vamos
ver no decorrer deste tutorial, devem ser obtida do heap. Heap é a região de memória livre do seu computador.
Desta forma é necessário verificar se a memória livre do seu computador é suficiente para o armazenamento e
isto pode ser feito da seguinteforma:

Caso a função malloc() devolver o valor nulo significa que não há memória suficiente e nesse caso o
programa deve imprimir na tela a mensagem “Memória insuficiente” e imediatamente terminar o programa que
é feito através da função exit().

A função free() usada neste e nos demais exemplos de alocação dinâmica serve para liberar a memória
alocada. E sua sintaxe é a seguinte:

O p éum ponteiro que aponta para a memória alocada anteriormente, em nosso programa o ponteiro vet.
Agora veremos outras funções padrões de alocação dinâmica:
1.

Calloc()

Esta função também tem como objetivo alocar memória e possui a seguinte sintaxe:

O num representa a quantidade de memória a ser alocada e o size é o seu tamanho. Esta função inicia o
espaço alocado com 0. O exemplo...
tracking img