Você está na página 1de 9

Linguagem Orientada

a Objetos
Aula 5: Alocao Dinmica de Memria
Prof. Ms. Daniel Arndt Alves
http://www.progdan.pro.br
Computao e Informtica
Faculdade de
1
Aclocao Dinmica de Memria Daniel Arndt Alves
Tpicos da Aula
Alocao Dinmica de Memria
Alocao dinmica de vetores
Alocao dinmica de objetos
2
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica
Na maioria das vezes, vetores e matrizes
so superdimensionados para poder
acomodar todas as informaes
oferecidas pelo usurio.
Ex. define-se um vetor de 100
elementos, na prtica se utiliza
apenas 20 ou 30 elementos.
3
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica
Para economizar memria, podemos
fazer a alocao dinmica de elementos
de um vetor ou matriz, usando apenas a
quantidade necessria de elementos.
4
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica
Alguns compiladores (como o Dev-C++)
aceitam a declarao de vetores e
matrizes estticos cujo tamanho
definido em tempo de execuo.
Isso deve ser evitado, pois contraria a
normalizao da linguagem C++.
5
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica
6
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica
Na linguagem C, a alocao dinmica
de memria feita usando as funes
malloc e free.
A funo malloc aloca a memria
A funo free libera a memria
alocada
7
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica
8
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica
Na linguagem C++, a alocao
dinmica de memria feita usando as
funes new e delete.
A funo new aloca a memria
A funo delete libera a memria
alocada
9
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica
10
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
Um vetor uma coleo de dados do
mesmo tipo, agrupados sob um nico
nome.
11
Aclocao Dinmica de Memria Daniel Arndt Alves
Em C++, declara-se um vetor alocando-
se uma regio de memria suficiente
para armazenar a quantidade de
elemento de um dado tipo pretendido.
O endereo inicial desta rea
armazenado em uma varivel ponteiro.
12
Alocao Dinmica de Vetores
Aclocao Dinmica de Memria Daniel Arndt Alves
Para armazenar uma lista de 10 valores
inteiros, necessrio:
Declarar um ponteiro para inteiro.
Alocar espao de memria suficiente
para armazenar 10 inteiros.
Armazenar o endereo inicial da rea
alocada no ponteiro declarado
13
Alocao Dinmica de Vetores
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
14
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
O operador new aloca uma regio de
memria para conter a estrutura de
dados solicitada.
Pode ser usada tanto para a alocao
de vetores como de variveis simples
ou objetos.
15
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
No caso de alocao de vetores, deve ser
especificado o nmero de posies do vetor
entre colchetes, aps o tipo de dados base.
16
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
A liberao da rea de memria alocada
com new, deve ser feita com o uso do
operador delete.
reas alocadas com new no so
liberadas aps o trmino da funo
onde foram alocadas. (somente o
ponteiro liberado!!!)
17
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
As reas de memria somente so
liberadas automaticamente aps o
trmino do programa.
18
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
19
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
20
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
21
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
Semelhante Linguagem C, caso no
exista espao disponvel na memria, a
funo new retorna zero ou NULL
(constante definida em stdlib.h)
22
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
extremamente importante testar se a
alocao foi bem sucedida, caso
contrrio, corre-se o risco de se tentar
trabalhar sobre uma estrutura que no
existe.
23
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
O operador delete no zera o ponteiro,
apenas libera a rea de memria.
uma boa prtica de programao
atribuir NULL aos ponteiros aps a
liberao.
24
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
Uma matriz, na verdade um vetor com
2 dimenses
25
Aclocao Dinmica de Memria Daniel Arndt Alves 26
Linguagem Orientada a Objetos



Desaloca(&v1); // Libera memria alocada para v1
Desaloca(&v2); // Libera memria alocada para v2
Desaloca(&v3); // Libera memria alocada para v3
system("pause");
return 0;
}


Representao de uma matriz dinmica na memria
!! A Iigura 2 ilustra como uma matriz 'a de elementos do tipo 'double, com 'm linhas e 'n
colunas, pode ser alocada dinamicamente.
!! A variavel 'a aponta para um endereo de memoria onde existe um vetor de 'm elementos do
tipo ponteiro para double.
!! Cada elemento deste vetor (a|0|, a|1|, .) aponta para um vetor de 'n elementos do tipo double
que representa uma das linhas da matriz.


Alocao dinmica de matrizes na Linguagem C
!! O exemplo a seguir Iaz a alocao dinmica de uma matriz de 'm linhas e 'n colunas, preenche
a matriz calculando cada elemento atraves da expresso aij(ij)/10 e exibe (no Iormato de matriz)
os elementos calculados.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int i, j, m, n;
double **a;

printf("Quantidade de linhas: ");
scanf("%d",&m);
printf("Quantidade de colunas: ");
scanf("%d",&n);

// Aloca espao para m linhas
a = (double **) malloc(m*sizeof(double*));

// Aloca espao para n colunas
for (i=0; i<m; i++)
a[i] = (double *) malloc(n*sizeof(double));

a|0|
...
... ... ...
a|0||0| ... a|0||1| a|0||n-1|
a|1||0| ... a|1||1| a|1||n-1|
a|2||0| ... a|2||1| a|2||n-1|
a|m-1||0| ... a|m-1||1| a|m-1||n-1|
a
a|1|
a|2|
a|m-1|
!

a
l
o
c
a

o

d
e

m

p
o
n
t
e
i
r
o
s

p
a
r
a


d
o
u
b
l
e

" m alocaes de n valores double
Figura 2 Alocao dinamica de matri:es
Fonte. C para Universitarios (Zamboni, Pamboukian, Barros. 2. ed. So Paulo. Paginas & Letras, 2008)
Alocao Dinmica de Vetores
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
O exemplo a seguir faz a alocao
dinmica de uma matriz de m linhas e n
colunas
A matriz preenchida atravs do clculo
de cada elemento, atravs da expresso:
27
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
28
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
29
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
30
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
31
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Vetores
32
Aclocao Dinmica de Memria Daniel Arndt Alves
Alocao Dinmica de Objetos
A nica diferena entre a alocao
dinmica de uma varivel e a alocao
dinmica de um objeto, que no caso de
objetos, a utilizao do operador new,
implicar na ativao da funo
construtora e o uso do operador delete, na
ativao da funo destrutora.
33
Aclocao Dinmica de Memria Daniel Arndt Alves
Na alocao dinmica de objetos, deve-se
ter o cuidado de que a funo
construtora do objeto no tenha
parmetros (construtor default), ou que
pelo menos exista uma verso do
construtor sem parmetros.
34
Alocao Dinmica de Objetos
Obrigado
35
Prof. Ms. Daniel Arndt Alves
http://www.progdan.pro.br
Computao e Informtica
Faculdade de

Você também pode gostar