Estrutura de Dados Aula 07 - Alocação dinâmica de memória
-
Upload
leinylson-fontinele -
Category
Education
-
view
139 -
download
1
Transcript of Estrutura de Dados Aula 07 - Alocação dinâmica de memória
![Page 1: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/1.jpg)
# Estrutura de Dados #Aula 07 – Alocação Dinâmica de Memória
Prof. Leinylson Fontinele Pereira
![Page 2: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/2.jpg)
13:47
Alocação Estática
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 3: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/3.jpg)
Alocação Estática
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
Na alocação estática de memória, os tipos de dados temtamanho predefinido.
O compilador vai alocar de forma automática o espaço dememória necessário.
Este tipo de alocação tende a desperdiçar recursos, já que nemsempre é possível determinar previamente qual é o espaçonecessário para armazenar as informações.
![Page 4: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/4.jpg)
Alocação Estática
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
Quando não se conhece o espaço total necessário, a tendênciaé o programador exagerar pois é melhor superdimensionar doque faltar espaço!
Quando um programador define o tipo e o número deelementos de um vetor, ele está utilizando alocação estática
![Page 5: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/5.jpg)
13:47
Alocação Dinâmica
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 6: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/6.jpg)
Alocação Dinâmica
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
Na alocação dinâmica podemos alocar espaços durante aexecução de um programa
Isto é bem interessante do ponto de vista do programador,pois permite que o espaço em memória seja alocado apenasquando necessário
Além disso, permite aumentar ou até diminuir a quantidadede memória alocada
![Page 7: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/7.jpg)
Prática
13:47 7
As aulas práticas foram baseadas no material de
Linguagem C Descomplicada , Dr. André R. Backes.
Disponível em: https://programacaodescomplicada.wordpress.com/
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 8: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/8.jpg)
13:47 8
Operador sizeof
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 9: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/9.jpg)
Operador sizeof
13:47
Alocar memória do tipo int é diferente de alocar memóriado tipo char
Tipos diferentes podem ter tamanhos diferentes namemória
𝐶ℎ𝑎𝑟 ∶ 1 𝑏𝑦𝑡𝑒𝐼𝑛𝑡 ∶ 4 𝑏𝑦𝑡𝑒𝑠𝐹𝑙𝑜𝑎𝑡 ∶ 4 𝑏𝑦𝑡𝑒𝑠𝐷𝑜𝑢𝑏𝑙𝑒 ∶ 8 𝑏𝑦𝑡𝑒𝑠
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 10: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/10.jpg)
Operador sizeof
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 11: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/11.jpg)
Operador sizeof
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 12: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/12.jpg)
13:47 12
Função malloc
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 13: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/13.jpg)
Função malloc
13:47
Serve para alocar memória durante a execução
Ela faz o pedido de memória ao computador e retornaum ponteiro com o endereço do início do espaço dememória alocado
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 14: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/14.jpg)
Função malloc
13:47
A função maloc() recebe por parâmetro:
A quantidade de bytes a ser alocada
A função retorna:
NULL: no caso de erro
Ponteiro para a primeira posição do array
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 15: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/15.jpg)
Função malloc
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 16: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/16.jpg)
Função malloc
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 17: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/17.jpg)
13:47 17
Função free
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 18: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/18.jpg)
Função free
13:47
A função free libera o espaço de memória alocado
Sempre que alocamos memória é necessário liberá-la
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 19: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/19.jpg)
Função free
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 20: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/20.jpg)
13:47 20
Exemplo!
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 21: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/21.jpg)
Função malloc – sizeof - free
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 22: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/22.jpg)
Função malloc – sizeof - free
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
𝟏 ‐ Calcular o número de bytes necessários
Primeiramente multiplicamos o número de componentes do vetor pela quantidade de bytes que é dada pelo comando 𝑠𝑖𝑧𝑒𝑜𝑓
𝑛𝑢𝑚_𝑐𝑜𝑚𝑝𝑜𝑛𝑒𝑛𝑡𝑒𝑠 ∗ 𝑠𝑖𝑧𝑒𝑜𝑓(𝑓𝑙𝑜𝑎𝑡)
𝟐 ‐ Reservar a quantidade de memória
Usamos𝑚𝑎𝑙𝑙𝑜𝑐 para reservar essa quantidade de memória
𝑚𝑎𝑙𝑙𝑜𝑐(𝑛𝑢𝑚_𝑐𝑜𝑚𝑝𝑜𝑛𝑒𝑛𝑡𝑒𝑠 ∗ 𝑠𝑖𝑧𝑒𝑜𝑓(𝑓𝑙𝑜𝑎𝑡))
𝟑 ‐ Converter o ponteiro para o tipo de dados desejado
Como a função 𝑚𝑎𝑙𝑙𝑜𝑐 retorna um ponteiro do tipo 𝑣𝑜𝑖𝑑, precisamos converter esse ponteiro para o tipo da nossa variável,no caso 𝑓𝑙𝑜𝑎𝑡, por isso usamos o comando de conversão explicita:
(𝑓𝑙𝑜𝑎𝑡 ∗)
![Page 23: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/23.jpg)
Função malloc – sizeof - free
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 24: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/24.jpg)
Função malloc – sizeof - free
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 25: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/25.jpg)
Função malloc – sizeof - free
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 26: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/26.jpg)
13:47 26
Função calloc
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 27: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/27.jpg)
Função calloc
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
Serve para alocar memória durante a execução
Ela faz o pedido de memória ao computador e retornaum ponteiro com o endereço do início do espaço dememória alocado
![Page 28: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/28.jpg)
Função calloc
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
A função calloc() recebe por parâmetro:
Numero de elementos no array a ser alocado
Tamanho de cada elemento do array
A função retorna:
NULL: no caso de erro
Ponteiro para a primeira posição do array
![Page 29: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/29.jpg)
Função calloc
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 30: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/30.jpg)
Função calloc
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 31: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/31.jpg)
Função calloc
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 32: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/32.jpg)
13:47 32
Função Realloc
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 33: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/33.jpg)
Função Realloc
13:47
Alocar ou realocar memória durante a execução
Ela faz o pedido de memória ao computador e retornaum ponteiro com o endereço do início do espaço dememória alocado
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 34: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/34.jpg)
Função Realloc
13:47
A função realloc() recebe por parâmetro:
Ponteiro para um bloco de memória já alocado
A quantidade de bytes a ser alocada
A função retorna:
NULL: no caso de erro
Ponteiro para a primeira posição do arrayEstrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 35: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/35.jpg)
Função Realloc
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 36: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/36.jpg)
Função Realloc
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 37: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/37.jpg)
Função Realloc
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 38: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/38.jpg)
Função Realloc
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 39: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/39.jpg)
Função Realloc
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 40: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/40.jpg)
13:47 40
Alocação de Matrizes
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 41: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/41.jpg)
Alocação de Matrizes
13:47
Para alocar um array multidimensional, precisamosutilizar o conceito de ponteiro para ponteiro
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 42: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/42.jpg)
Alocação de Matrizes
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 43: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/43.jpg)
Alocação de Matrizes
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
Em um ponteiro para ponteiro, cada nível do ponteiropermite criar uma nova dimensão no array
int* -> permite criar um array de int
int** -> permite criar um array de int*
![Page 44: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/44.jpg)
Alocação de Matrizes
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 45: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/45.jpg)
Alocação de Matrizes
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 46: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/46.jpg)
Alocação de Matrizes
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 47: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/47.jpg)
Alocação de Matrizes
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
![Page 48: Estrutura de Dados Aula 07 - Alocação dinâmica de memória](https://reader038.fdocument.pub/reader038/viewer/2022102720/58ed0dbf1a28aba0548b45db/html5/thumbnails/48.jpg)
Alocação de Matrizes
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória