Buscar

Alocação Dinâmica de Memória em C++

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

*
*
ESTRUTURAS DE DADOS – AULA 8
ANITA MACIEL
Rio de Janeiro, 2011
*
*
*
*
Alocação
Dinâmica
1a parte
*
*
A alocação dinâmica de memória vem possibilitar a criação de tipos de dados e estruturas de qualquer tamanho durante a execução do programa. 
*
*
 
Sua função é fazer alocação dinâmica de memória, retornando o endereço inicial do bloco alocado.
 
Você poderá alocar espaço para armazenar um dado ou um conjunto de dados(array).
 
Se você for alocar para armazenar um dado, deverá fazê-lo com new, mas se for para armazenar um array, use new[ ]
Operador new
*
*
Sua função é retornar para a área de memória livre o espaço que foi alocado dinamicamente.
 
Se você for retornar uma área que estava armazenando um valor, deverá delete, mas se for um array, use delete [ ]. 
Operador delete
*
*
Só usarmos esse operador não nos dará garantia de que tudo ocorrerá sem problemas com afirma DROZDEK, A(2002, p.10)
Se depois de emitirmos a declaração delete não apagarmos o endereço da variável ponteiro que participa da supressão do bloco de memória, o resultado é potencialmente perigoso e podemos fazer o programa entrar em colapso quando tentarmos acessar locais inexistentes, particularmente para objetos mias complexos do que valores numéricos. Isso que se chama de problema de referência pendente(grifo nosso). 
Uma das formas de se fazer isso, é atribuir 0(zero) à variável ponteiro para que ela se torne nula.
*
*
*
*
*
*
Sua Majestade 
*
*
*
*
Precede o nome da variável, significando o endereço dela e não seu conteúdo.
*
*
Precede o nome da variável na declaração para indicar que é uma variável ponteiro.
*
*
Em outros momentos, precede a variável ponteiro para indicar o conteúdo da variável apontada pelo ponteiro.
*
*
Como se declara?
*
*
tipo *nomeDaVariávelPonteiro ;
Como se declara?
*
*
O que armazena?
tipo *nomeDaVariávelPonteiro ;
Como se declara?
*
*
O endereço de uma variável 
O que armazena?
tipo *nomeDaVariávelPonteiro ;
Como se declara?
*
*
Como é feita a escolha do tipo?
O endereço de uma variável 
O que armazena?
tipo *nomeDaVariávelPonteiro ;
Como se declara?
*
*
Depende da variável apontada pelo ponteiro
Como é feita a escolha do tipo?
O endereço de uma variável 
O que armazena?
tipo *nomeDaVariávelPonteiro ;
Como se declara?
*
*
Como se incializa?
int a, *pa;
a=23;
pa= &a;
ou
*
*
int a=23, *pa=&a ; 
Como se incializa?
int a, *pa;
a=23;
pa= &a;
ou
*
*
Uma terceira maneira 
*
*
cout <<ano <<endl;
cout<<&ano <<endl;
cout<<ptrano <<endl;
cout<<&ptrano<<endl;
cout<<*ptrano<<endl;
*
*
cout <<ano <<endl; 1989
cout<<&ano <<endl; 0x22ff74
cout<<ptrano <<endl; 0x22ff74
cout<<&ptrano<<endl; 0x22ff70
cout<<*ptrano<<endl; 1989
*
*
Ponteiros para Estruturas 
*
*
Ponteiro e Alocação Dinâmica 
*
*
1a sintaxe
tipo - é o tipo do ponteiro.
* - operador que sinaliza que a variável
 é um ponteiro.
new - aloca a memória dinamicamente.
tipo - é o tipo do dado, compatível com o tipo do ponteiro.
*
*
2a sintaxe
  tipo - é o tipo do ponteiro.
 * - operador que sinaliza que a variável é um ponteiro.
   new - aloca a memória dinamicamente.
 tipo[...] - é o tipo do dado, compatível com o tipo do ponteiro. Aloca uma quantidade especificada dentro dos colchetes.    
*
*
Exemplos
float *ptF= new float;
int *ptI= new int(1989);
int *pt= new int[300];
   
*
*
*
*
*
*
cin>>alunos[x];
float *alunos,...;
Declarou como ponteiro e usa como vetor?
Demorou hoje, heim! Vou lhe explicar.
*
*
A estreita relação entre Ponteiros e Matrizes
Suponha uma variável ponteiro do tipo int e de nome ptrAno e de tamanho 4.
*
*
Toda vez que usamos a expressão ptrAno + 1, estamos dizendo que o ponteiro está se deslocando de 4 posições porque é o que o tipo int ocupa.
A estreita relação entre Ponteiros e Matrizes
*
*
Se recordarmos o significado do índice de uma matriz (deslocamento do endereço base), perceberemos que tem o mesmo significado. 
A estreita relação entre Ponteiros e Matrizes
*
*
Sendo assim, uma variável do tipo ponteiro poderá ser tratada como vetor e vice-versa. 
Para que pudéssemos armazenar um valor usando cin>> e ponteiro, faríamos:
A estreita relação entre Ponteiros e Matrizes
*
*
cin>>*(alunos+x);
que seria equivalente à
cin>>alunos[x];
A estreita relação entre Ponteiros e Matrizes
*
*
Ponteiro e matriz de estruturas 
Como precisaremos dominar esse assunto porque usaremos em Listas Encadeadas, Filas e Pilhas Dinâmicas e Listas Duplamente Encadeadas, Vamos terminar esta 1a parte da aula com ele.
*
*
Acessando um membro
ptr->matric;
*
*
2a parte
*
*
As Listas Encadeadas podem ser:
 Encadeamento Simples – cada nó é ligado por um ponteiro, permitindo que ela seja percorrida(cruzada) do primeiro ao último elemento.
 Encadeamento duplo – cada nó é ligado por dois ponteiros. Esse tipo de lista permite um cruzamento igual ao da Lista Simples, mas acrescenta a possibilidade da lista ser percorrida(cruzada) de trás para frente. 
*
*
Encadeadas circulares – onde o último nó é ligado ao primeiro, significando que não existe NULL. 
*
*
Listas de encadeamento simples, normalmente chamadas simplesmente de Listas Encadeadas, são compostas de elementos individuais, cada um ligado por um único ponteiro. Cada elemento consiste de duas partes: um membro de dados e um ponteiro.(LOUDON, K, 2000, p.56) 
*
*
A lista é formada por nós
Se olharmos para este nó, podemos entendê-lo como uma estrutura, visto que ele é formado por dois tipos diferentes, sendo um, necessariamente, ponteiro.
*
*
*
*
“Essa circularidade, no entanto, é permitida em C++”. (DROZDEK, A, 2002, p.68) 
*
*
*
*
Criando uma lista de um nó
1) Declarando a struct
*
*
2) Criando nó 
Criando uma lista de um nó
*
*
3) Atribuindo valores aos membros 
2) Criando nó 
Criando uma lista de um nó
*
*
4) Exibindo 
Criando uma lista de um nó
*
*
5) Liberando 
4) Exibindo 
Criando uma lista de um nó
*
*
*
*
A Aula 8 foi dividida em duas partes: Alocação Dinâmica e início de Listas Encadeadas.
Na Aula 9, finalizarei Listas encadeadas e apresentei Pilha e Fila Dinâmicas.
*
*
*
*
Reveja todos os conceitos desta aula.
Aprimore seus conhecimentos pesquisando no material didático e na bibliografia recomendada (procure na Biblioteca do campus ou na Biblioteca Virtual/ SIA).
Faça todos os exercícios.
*
*
Esteja sempre em contato com seu professor.
Não durma com dúvidas.
Assista a esta aula quantas vezes for necessário.
*
*
*
*

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando

Outros materiais