Anda di halaman 1dari 29

20 - Alocação Dinâmica Prof.

Glécio Albuquerque

PROGRAMAÇÃO II
Alocação Dinâmica

Prof. Glécio Albuquerque


www.glecioalbuquerque.com
glecio.albuquerque@facape.br
glecioalbuquerque@gmail.com
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Conteúdo
•  Alocação Estática
•  Alocação Dinâmica
•  Malloc
•  Sizeof
•  Free
•  Alocação de Vetores
•  Alocação de Matrizes
•  Calloc
•  Realloc
•  Exercício
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Alocação Estática
•  Na execução de um programa geralmente precisamos
armazenar dados temporariamente na memória. Para
isso, lançamos mão das variáveis de memória.
•  As variáveis de memórias são declaradas através da
determinação de um tipo de dado e seu identificador
(nome), podendo ainda ser seguida de seu valor inicial
(default).
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Alocação Estática
•  No exemplo anterior, as variáveis são definidas utilizando
alocação estática.
•  Em tempo de compilação já é conhecida a quantidade de
memória que será necessária para a execução do
programa.
•  Ao iniciar o programa, toda a memória necessária para a
sua execução será alocada.
•  Acontece que, às vezes, a quantidade de memória a
alocar só se torna conhecida durante a execução do
programa. Para lidar com essa situação é preciso recorrer
à alocação dinâmica de memória.
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Alocação Dinâmica
•  A alocação dinâmica é o processo utilizado para se
alocar memória em tempo de execução.
•  É utilizada quando não se sabe ao certo quanto de
memória será necessário para o armazenamento dos
dados, podendo ser determinado em tempo de execução
conforme a necessidade do programa.
•  Outro ponto é a econômica de memória, já que é alocada
apenas a quantidade de memória necessária para a
operação.
•  A alocação dinâmica é muito utilizada em problemas de
estruturas de dados, a exemplo de listas encadeadas e
arvores, entre outros.
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Alocação dinâmica
•  Para trabalharmos com alocação dinâmica em linguagem
C, fazemos uso das seguintes funções:
•  malloc
•  calloc
•  realloc
•  free
•  Além dessas funções, fazemos uso do operador sizeof.
•  Também, na alocação dinâmica, o conceito de ponteiros
é bastante utilizado.
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Ponteiros
•  Ponteiro é um tipo de dado especial que armazena um
endereço de memória. Possui um tipo e é precedido do
simbolo “*”.
•  Exemplo de uso de um ponteiro e seu comportamento na
memória:
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Malloc
•  A função malloc aloca um bloco de bytes consecutivos
na memória do computador e devolve o endereço do
primeiro byte desse bloco.
•  O número de bytes é especificado como argumento da
chamada da função.
•  A função malloc retorna um ponteiro de tipo genérico,
void *, cabendo ao programador fazer um type casting
para o tipo apropriado.
•  No seguinte fragmento de código, malloc aloca 01 byte:
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Malloc
•  Neste outro código, a função malloc é utilizada para
alocar espaço de memória para um valor inteiro e um
valor double:
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Malloc
•  No caso de alocarmos espaço de memória pra um
registro (struct), precisamos saber a quantidade total
de bytes necessários para armazenar a estrutura na
memória.

•  Para facilitar esta tarefa, fazemos uso do operador


sizeof.
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Sizeof
•  O operador sizeof retorna um inteiro, informando o
tamanho, em bytes, do tipo de dados passado como
argumento:
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Sizeof
•  Exemplos anteriores aplicando o operador sizeof:
20 - Alocação Dinâmica Prof. Glécio Albuquerque

NULL
•  Se a memória do computador já estiver toda ocupada,
malloc não consegue alocar mais espaço e devolve
NULL.
•  Convém verificar essa possibilidade antes de prosseguir:
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Free
•  As variáveis alocadas estaticamente dentro de um
escopo de código são desalocadas automaticamente
quando a execução do escopo termina.
•  Já as variáveis alocadas dinâmicamente continuam a
existir mesmo depois que a execução do escopo termina.
•  Para liberarmos a memória ocupada por essas variáveis,
é preciso recorrer à função free.
•  A função free recebe como parâmetro um ponteiro para
o endereço inicial da memória que será desalocada.
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Free
•  A função free libera a porção de memória alocada por
malloc. O comando avisa ao sistema que o bloco de
bytes apontado por idade está livre. A próxima chamada
de malloc poderá tomar posse desses bytes.
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Alocando Vetores
•  Como já vimos, é possível alocar, além de variáveis
simples, estruturas mais complexas, a exemplo de
registros.
•  É possível também trabalharmos dinâmicamente com
outros tipos de estruturas, como por exemplo os vetores.
•  De acordo com a norma ANSI, o trecho de código a
seguir não é a forma correta de se declarar um vetor, a
menos que n seja uma constante, definida por const ou
#define.
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Alocando Vetores
•  O exemplo a seguir mostra como podemos alocar e
desalocar um vetor com n elementos inteiros durante a
execução de um programa:
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Alocando Matrizes
•  Outra exemplo de estruturas onde podemos utilizar
alocação dinâmica são as matrizes.
•  Matrizes bidimensionais são implementadas como
vetores de vetores.
•  Uma matriz com n linhas e m colunas é um vetor onde
cada elemento de n é um vetor de m elementos.
•  Isto significa que temos um vetor de n posições de
poteiros, onde cada posição de n vai apontar para um
vetor de m posições do tipo de dado da matriz.
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Alocando Matrizes
•  Exemplo da alocação dinâmica de uma matriz n x m:
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Desalocando Matrizes
•  Exemplo de desalocação da matriz n x m alocada
anteriormente:
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Calloc
•  Assim como malloc, calloc tem a função de alocar
espaços na memória. Sua principal diferença é que a
mesma inicializa com zeros os bits das posições de
memórias alocadas.
•  Outro ponto é que o uso de calloc facilita a alocação de
estruturas como vetores e matrizes.
•  Está definida da seguinte forma:

•  A função calloc recebe como parâmetros dois inteiros


sem sinal. O primeiro indica a quantidade de dados que
se pretende alocar e o segundo, o tamanho, em bytes, de
cada dado que será alocado.
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Calloc
•  No trecho de código a seguir é alocado um vetor de
inteiros com 5 posições através da função calloc:

•  É importante observar que, da mesma forma como


acontece com malloc, caso a alocação não seja
efetivada, ao invés de retornar um ponteiro a função irá
retornar o valor NULL.
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Realloc
•  A função realloc permite alocar ou realocar um
espaço de memória.
•  Pode ser utilizada em casos onde se deseja aumentar ou
diminuir o espaço de memória previamente alocado.
•  Está definida da seguinte forma:

•  A função recebe um ponteiro para o qual se deseja alocar


ou realocar e a quantidade de memória, em bytes,
necessária para a operação.
•  Assim como malloc e calloc, realloc retorna um
ponteiro para o primeiro byte da memória alocada ou o
valor NULL.
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Realloc
•  Exemplo de uso da função realloc:
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Realloc
•  Alocando e desalocando com realloc:
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Praticando
1.  Escreva um programa que leia um número inteiro
positivo n, indicando a quantidade de inteiros que
serão lidos, e imprima-os em ordem invertida. Por
exemplo, ao receber
5, 222, 333, 444, 555 e 666
seu programa deve imprimir
666, 555, 444, 333, 222 e 5
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Códigos e exercícios
https://drive.google.com/folderview?
id=0BxsDe2LkW3V2cExTTTE3YWhmLTg&usp=sharing
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Referências
CPLUSPLUS. C Standard General Utilities Library. Disponível
em: http://www.cplusplus.com/reference/cstdlib/. Acessado em:
10/07/2015.
LINGUAGEMCDESCOMPLICADA. Linguagem C. Disponível
em: https://programacaodescomplicada.wordpress.com/indice/
linguagem-c/. Acessado em: 10/07/2015.

MEDINA, Marco. FERTIG, Cristina. Algoritmos e


Programação: Teoria e prática. São Paulo: Novatec, 2006.
SCHILDT, Herbert. C Completo e Total. 3.ed. Makron Books do
Brasil Editora, São Paulo, 1996.
20 - Alocação Dinâmica Prof. Glécio Albuquerque

Obrigado!!!

Anda mungkin juga menyukai