Buscar

Alocação Dinâmica em C

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 51 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 51 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 51 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação dinâmica de memória
Prof. DSc. Newton Spolaôr
Disciplina Computação I
Bacharelado em Ciência da Computação
Universidade Estadual do Oeste do Paraná (UNIOESTE)
Brasil
10/11/2016
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Sumário
1 Considerações iniciais
2 Alocação dinâmica de memória
3 Exercícios
4 Considerações finais
Newton Spolaôr Alocação dinâmica de memória 2
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Aula anterior em um olhar
Considerações iniciais
Objetivo geral desta aula
Aula anterior em um olhar
Arquivos oferecem uma maneira de armazenar dados no
computador de modo persistente
Diferentes funções na linguagem C são disponibilizadas
para trabalhar com esses arquivos
Na aula de hoje, serão apresentadas noções sobre o
conceito de alocação dinâmica de memória
Newton Spolaôr Alocação dinâmica de memória 3
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Aula anterior em um olhar
Considerações iniciais
Objetivo geral desta aula
Aula anterior em um olhar
Arquivos oferecem uma maneira de armazenar dados no
computador de modo persistente
Diferentes funções na linguagem C são disponibilizadas
para trabalhar com esses arquivos
Na aula de hoje, serão apresentadas noções sobre o
conceito de alocação dinâmica de memória
Newton Spolaôr Alocação dinâmica de memória 3
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Aula anterior em um olhar
Considerações iniciais
Objetivo geral desta aula
Fotografia do uso da memória [1]
Newton Spolaôr Alocação dinâmica de memória 4
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Aula anterior em um olhar
Considerações iniciais
Objetivo geral desta aula
Alocação estática vs dinâmica [1, 2]
Alocação estática
O espaço para as variáveis é reservado e liberado
automaticamente pelo compilador/interpretador
O tempo de vida é distinto para variáveis globais (durante
execução do programa) e locais (durante execução de
função)
int b;
Alocação dinâmica
O espaço para as variáveis é reservado e liberado
dinamicamente pelo programador
A variável “vive” até ser desalocada explicitamente (ou até
o programa terminar)
int *a = (int *) malloc ( sizeof (int));
Newton Spolaôr Alocação dinâmica de memória 5
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Aula anterior em um olhar
Considerações iniciais
Objetivo geral desta aula
Algumas características da alocação dinâmica [3]
Vantagens
Flexibilidade: quantidade de memória a ser alocada pode
ser estabelecida em tempo de execução
Eficiência
Somente a quantidade necessária de memória precisa ser
alocada
Por outro lado, a alocação estática reserva quantidade fixa
de memória em tempo de compilação que, eventualmente, é
maior do que a memória necessária
Desvantagem: programador necessita lembrar de liberar
toda a memória utilizada — algumas linguagens de
programação, como Java, livram o programador dessa
preocupação
Newton Spolaôr Alocação dinâmica de memória 6
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Aula anterior em um olhar
Considerações iniciais
Objetivo geral desta aula
Algumas características da alocação dinâmica [3]
Vantagens
Flexibilidade: quantidade de memória a ser alocada pode
ser estabelecida em tempo de execução
Eficiência
Somente a quantidade necessária de memória precisa ser
alocada
Por outro lado, a alocação estática reserva quantidade fixa
de memória em tempo de compilação que, eventualmente, é
maior do que a memória necessária
Desvantagem: programador necessita lembrar de liberar
toda a memória utilizada — algumas linguagens de
programação, como Java, livram o programador dessa
preocupação
Newton Spolaôr Alocação dinâmica de memória 6
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Aula anterior em um olhar
Considerações iniciais
Objetivo geral desta aula
Objetivo geral desta aula
Apresentar noções sobre o conceito de alocação dinâmica
de memória
Newton Spolaôr Alocação dinâmica de memória 7
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Sumário
1 Considerações iniciais
2 Alocação dinâmica de memória
3 Exercícios
4 Considerações finais
Newton Spolaôr Alocação dinâmica de memória 8
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Tempo de vida das variáveis estáticas [1]
#include <stdio.h>
void quad(int n) {
n = n * n;
printf ("n = %d\n", n);
}
int main () {
int k;
scanf ("%d", &k);
if(k > 10) {
int x = 10;
quad(x);
} else quad(k);
printf ("k = %d\n", k);
system("pause");
return 0;
}
Newton Spolaôr Alocação dinâmica de memória 9
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Tempo de vida das variáveis estáticas [1]
Por quanto tempo a variável n, alocada estaticamente, é
necessária?
E a variável x? Vide demonstração na linguagem C na
IDE Netbeans
Como demonstrado, o próprio compilador desaloca as
variáveis alocadas estaticamente quando deixam de ser
necessárias
Newton Spolaôr Alocação dinâmica de memória 10
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Tempo de vida das variáveis estáticas [1]
Por quanto tempo a variável n, alocada estaticamente, é
necessária?
E a variável x?
Vide demonstração na linguagem C na
IDE Netbeans
Como demonstrado, o próprio compilador desaloca as
variáveis alocadas estaticamente quando deixam de ser
necessárias
Newton Spolaôr Alocação dinâmica de memória 10
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Tempo de vida das variáveis estáticas [1]
Por quanto tempo a variável n, alocada estaticamente, é
necessária?
E a variável x? Vide demonstração na linguagem C na
IDE Netbeans
Como demonstrado, o próprio compilador desaloca as
variáveis alocadas estaticamente quando deixam de ser
necessárias
Newton Spolaôr Alocação dinâmica de memória 10
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Tempo de vida das variáveis estáticas [1]
Por quanto tempo a variável n, alocada estaticamente, é
necessária?
E a variável x? Vide demonstração na linguagem C na
IDE Netbeans
Como demonstrado, o próprio compilador desaloca as
variáveis alocadas estaticamente quando deixam de ser
necessárias
Newton Spolaôr Alocação dinâmica de memória 10
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Conceitos relacionados a alocação dinâmica [1]
Ponteiro
Uma variável é alocada dinamicamente por meio de um
ponteiro ou apontador (pointer )
Basicamente, um ponteiro armazena o endereço (posição)
de memória de uma variável
Memória heap
A memória alocada dinamicamente faz parte de uma área
da memória chamada heap
Um programa pode alocare desalocar porções de
memória do heap durante a sua execução
Newton Spolaôr Alocação dinâmica de memória 11
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Liberação de memória [1]
A memória deve ser liberada após o término de seu uso
Este trabalho deve ser feito por quem fez a alocação
Alocação estática: compilador
Alocação dinâmica: programador
Obs.: a alocação dinâmica necessita de rotinas da
biblioteca stdlib.h
Newton Spolaôr Alocação dinâmica de memória 12
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Código de alocação dinâmica vs estática [1]
Declaração de variável: Tipo *p; vs Tipo x;
Alocação de memória (apenas dinâmica):
p = (Tipo*) malloc(sizeof(Tipo));
Liberação de memória (apenas dinâmica): free(p);
Conteúdo da variável: *p; vs x;
Referência à variável, i.e., seu endereço de memória:
p; vs &x;
Anulação de ponteiro (apenas dinâmica): p = NULL;
Newton Spolaôr Alocação dinâmica de memória 13
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Código de alocação dinâmica vs estática [1]
Declaração de variável: Tipo *p; vs Tipo x;
Alocação de memória (apenas dinâmica):
p = (Tipo*) malloc(sizeof(Tipo));
Liberação de memória (apenas dinâmica): free(p);
Conteúdo da variável: *p; vs x;
Referência à variável, i.e., seu endereço de memória:
p; vs &x;
Anulação de ponteiro (apenas dinâmica): p = NULL;
Newton Spolaôr Alocação dinâmica de memória 13
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Código de alocação dinâmica vs estática [1]
Declaração de variável: Tipo *p; vs Tipo x;
Alocação de memória (apenas dinâmica):
p = (Tipo*) malloc(sizeof(Tipo));
Liberação de memória (apenas dinâmica): free(p);
Conteúdo da variável: *p; vs x;
Referência à variável, i.e., seu endereço de memória:
p; vs &x;
Anulação de ponteiro (apenas dinâmica): p = NULL;
Newton Spolaôr Alocação dinâmica de memória 13
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Código de alocação dinâmica vs estática [1]
Declaração de variável: Tipo *p; vs Tipo x;
Alocação de memória (apenas dinâmica):
p = (Tipo*) malloc(sizeof(Tipo));
Liberação de memória (apenas dinâmica): free(p);
Conteúdo da variável: *p; vs x;
Referência à variável, i.e., seu endereço de memória:
p; vs &x;
Anulação de ponteiro (apenas dinâmica): p = NULL;
Newton Spolaôr Alocação dinâmica de memória 13
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Código de alocação dinâmica vs estática [1]
Declaração de variável: Tipo *p; vs Tipo x;
Alocação de memória (apenas dinâmica):
p = (Tipo*) malloc(sizeof(Tipo));
Liberação de memória (apenas dinâmica): free(p);
Conteúdo da variável: *p; vs x;
Referência à variável, i.e., seu endereço de memória:
p; vs &x;
Anulação de ponteiro (apenas dinâmica): p = NULL;
Newton Spolaôr Alocação dinâmica de memória 13
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Código de alocação dinâmica vs estática [1]
Declaração de variável: Tipo *p; vs Tipo x;
Alocação de memória (apenas dinâmica):
p = (Tipo*) malloc(sizeof(Tipo));
Liberação de memória (apenas dinâmica): free(p);
Conteúdo da variável: *p; vs x;
Referência à variável, i.e., seu endereço de memória:
p; vs &x;
Anulação de ponteiro (apenas dinâmica): p = NULL;
Newton Spolaôr Alocação dinâmica de memória 13
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Nota sobre função malloc [2]
A função malloc é usada para alocar espaço para
armazenarmos valores de qualquer tipo
Por este motivo, malloc retorna um ponteiro genérico,
para um tipo qualquer, representado por void*, o qual
pode ser convertido para outro tipo desejado
É comum fazermos a conversão explicitamente, utilizando
o operador de molde de tipo (cast)
int n;
scanf("%d",&n);
v = (int *) malloc(n*sizeof(int));
//aloca dinamicamente vetor de n elementos int
Newton Spolaôr Alocação dinâmica de memória 14
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Código de alocação dinâmica vs estática [1]
Figura: Ao executar a linha 1, as variáveis a e b estarão em um
espaço de endereçamento estático, e seu valor será aquele
anteriormente armazenado na memória
Newton Spolaôr Alocação dinâmica de memória 15
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Código de alocação dinâmica vs estática [1]
Figura: Ao executar as linhas 4 e 5: (1) o conteúdo de b passa a ser
10 e (2) a apontará para um endereço do espaço dinâmico, que
conterá o valor armazenado anteriormente na memória (lixo, nesse
caso)
Newton Spolaôr Alocação dinâmica de memória 16
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Código de alocação dinâmica vs estática [1]
Figura: Ao executar a linha 6, o endereço para onde a aponta passa
a armazenar o valor 20
Newton Spolaôr Alocação dinâmica de memória 17
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Código de alocação dinâmica vs estática [1]
Figura: Contudo, ao executar a linha 7, a passa a apontar para b.
Como resultado, no momento ninguém referencia o endereço
apontado anteriormente por a
Newton Spolaôr Alocação dinâmica de memória 18
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Código de alocação dinâmica vs estática [1]
Figura: O uso da função free na linha 8 está incorreto. O objetivo
seria liberar a memória que foi inicialmente alocada para a. No
entanto, a não aponta mais para este endereço de memória. Além
disso, free não está desalocando memória alocada dinamicamente
Newton Spolaôr Alocação dinâmica de memória 19
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Código de alocação dinâmica vs estática [1]
Figura: Para corrigir este problema, as linhas 7 e 8 deveriam ser
invertidas. Primeiro a memória alocada dinamicamente é desalocada
e depois a passa a apontar para b. Veja que a memória dinâmica
anteriormente apontada por a foi liberada
Newton Spolaôr Alocação dinâmica de memória 20
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Erros comuns [1]
Esquecer de alocar memória e tentar acessar o conteúdo
de variável alocada dinamicamente
Copiar o valor do ponteiro ao invés do valor da memóriaapontada pelo ponteiro
Esquecer de desalocar memória
A memória será desalocada apenas no encerramento do
programa, o que pode ser um grande problema em loops
Ocasiona desperdício de memória, o que eventualmente
causará erro de execução no programa
Tentar acessar o conteúdo da variável após desalocá-la
Desafio: ilustrar cada um desses erros em C
Newton Spolaôr Alocação dinâmica de memória 21
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Erros comuns [1]
Esquecer de alocar memória e tentar acessar o conteúdo
de variável alocada dinamicamente
Copiar o valor do ponteiro ao invés do valor da memória
apontada pelo ponteiro
Esquecer de desalocar memória
A memória será desalocada apenas no encerramento do
programa, o que pode ser um grande problema em loops
Ocasiona desperdício de memória, o que eventualmente
causará erro de execução no programa
Tentar acessar o conteúdo da variável após desalocá-la
Desafio: ilustrar cada um desses erros em C
Newton Spolaôr Alocação dinâmica de memória 21
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Ponteiros e vetores [1]
Em C, um vetor é implementado como um ponteiro para o
primeiro elemento de uma sequência
Logo, um ponteiro pode ser usado para acessar um vetor
(outro ponteiro)
Como a e b poderiam ser representados na memória?
Newton Spolaôr Alocação dinâmica de memória 22
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Ponteiros e vetores [1]
Em C, um vetor é implementado como um ponteiro para o
primeiro elemento de uma sequência
Logo, um ponteiro pode ser usado para acessar um vetor
(outro ponteiro)
Como a e b poderiam ser representados na memória?
Newton Spolaôr Alocação dinâmica de memória 22
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Ponteiros e vetores [1]
Em C, um vetor é implementado como um ponteiro para o
primeiro elemento de uma sequência
Logo, um ponteiro pode ser usado para acessar um vetor
(outro ponteiro)
Por que lixo é impresso na subfigura da direita?
Newton Spolaôr Alocação dinâmica de memória 23
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Ponteiros e vetores [1]
Em C, um vetor é implementado como um ponteiro para o
primeiro elemento de uma sequência
Logo, um ponteiro pode ser usado para acessar um vetor
(outro ponteiro)
Por que lixo é impresso na subfigura da direita?
Newton Spolaôr Alocação dinâmica de memória 23
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Ponteiros para struct [1]
Newton Spolaôr Alocação dinâmica de memória 24
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Ponteiros e funções [1]
Existe algum erro nesse código?
Newton Spolaôr Alocação dinâmica de memória 25
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Ponteiros e funções [1]
Sim! Alocamos memória para uma cópia de a, não para a
Newton Spolaôr Alocação dinâmica de memória 26
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Ponteiros e funções [1]
Solução 1: retornar o ponteiro em questão
Newton Spolaôr Alocação dinâmica de memória 27
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Ponteiros e funções [1]
Solução 2: passar o ponteiro por referência
Newton Spolaôr Alocação dinâmica de memória 28
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Alocação estática
Alocação dinâmica
Conceitos adicionais sobre ponteiros
Ponteiros e funções [1]
Naturalmente, é possível passar por referência ponteiros
para tipos mais simples, como ilustrado a seguir
#include <stdio.h>
#include <stdlib.h>
void novoInt(int ** p){
(*p) = (int*) malloc (sizeof(int));
**p=30;
}
int main(){
int *x;
novoInt(&x);
printf("%d",*x);
free(x);
return 0; }
Newton Spolaôr Alocação dinâmica de memória 29
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Sumário
1 Considerações iniciais
2 Alocação dinâmica de memória
3 Exercícios
4 Considerações finais
Newton Spolaôr Alocação dinâmica de memória 30
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Exercício 1 [2]
Escreva um programa em linguagem C que solicita ao
usuário a quantidade de alunos de uma turma e aloca um
vetor de notas (números reais) referentes a uma prova,
sendo uma nota por aluno
Após, leia cada nota a partir do teclado
Em seguida, imprima a média aritmética das notas
Não deve ocorrer desperdício de memória; e após ser
utilizada a memória deve ser liberada
Newton Spolaôr Alocação dinâmica de memória 31
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Exercício 2
Estenda o exercício anterior para substituir o vetor de
notas por um vetor de registro (struct aluno), em que
cada aluno possui os seguintes campos
Nome completo (tipo string)
Data de matrícula (tipo struct data)
Nota em uma prova específica (tipo double)
Além da nota, cada campo adicional de um aluno deve ser
lido a partir do teclado
Em seguida, imprima a nota média, bem como o nome e
data de matrícula de todos os alunos com nota maior que
a nota média
Newton Spolaôr Alocação dinâmica de memória 32
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Exercício 3 [2]
Crie uma função que aloca e lê um vetor de n inteiros
Crie outra função que recebe o vetor e retorna o maior e o
menor valor
O programa principal deve executar as duas funções,
imprimir os valores retornados pela 2a função e liberar a
memória alocada pela 1a função
Newton Spolaôr Alocação dinâmica de memória 33
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Exercício 4
Especifique uma struct para armazenar os seguintes
dados de uma empresa: cnpj, razão social, nome fantasia,
número de funcionários e capital social
A partir dessa estrutura de dados, especifique três
operações (funções) para realizar as seguintes tarefas
1 Alocação dinâmica da estrutura, com preenchimento de
seus campos a partir de dados lidos do teclado
2 Impressão de todos os dados da estrutura
3 Desalocação da estrutura
O programa principal deve conter uma variável ponteiro
para a estrutura e as chamadas às 3 funções
Passe o parâmetro referente à struct por referência para
que seu código se aproxime um pouco mais de uma classe
Newton Spolaôr Alocação dinâmica de memória 34
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Considerações finais
1 Considerações iniciais
2 Alocação dinâmica de memória
3 Exercícios
4 Considerações finais
Newton Spolaôr Alocação dinâmica de memória35
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Considerações finais
Nesta aula foram apresentadas noções sobre o conceito
de alocação dinâmica de memória
Esse conceito é base para lidar com estruturas
sofisticadas de computação análogas a elementos do
mundo real, como pilhas, filas e árvores
Newton Spolaôr Alocação dinâmica de memória 36
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Contato
newtonsp.cesufoz@gmail.com
Newton Spolaôr Alocação dinâmica de memória 37
Considerações iniciais
Alocação dinâmica de memória
Exercícios
Considerações finais
Referências bibliográficas
[1] Fortes R. Recursividade; 2014.
Notas didáticas.
http://www.decom.ufop.br/reinaldo/disciplinas/bcc202-2014-
01/plano-de-aulas/.
[2] Wolf DF. Algoritmos; 2014.
Notas didáticas.
http://wiki.icmc.usp.br/index.php/Scc-101.
[3] Villas MV, Ferreira AGDM, Leroy PG, Bockman CL.
Estruturas de Dados. Conceitos e Técnicas de Implementação.
4th ed. Campus; 1993.
Newton Spolaôr Alocação dinâmica de memória 38
	Considerações iniciais
	Aula anterior em um olhar
	Considerações iniciais
	Objetivo geral desta aula
	Alocação dinâmica de memória
	Alocação estática
	Alocação dinâmica
	Conceitos adicionais sobre ponteiros
	Exercícios
	Considerações finais

Outros materiais