• Nenhum resultado encontrado

AlocacaoDinamica

N/A
N/A
Protected

Academic year: 2021

Share "AlocacaoDinamica"

Copied!
38
0
0

Texto

(1)

PROGRAMAÇÃO DE

COMPUTADORES I

Prof. Filipe Nunes Ribeiro

(2)

AGENDA

Inicialização de ponteiros

Alocação dinâmica de memória

Funções que retornam ponteiros

(3)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

INICIALIZAÇÃO DE PONTEIROS

Se tentarmos usar um ponteiro antes de

inicializá-lo, ou seja, antes de fornecer um

endereço inicial ao ponteiro, teremos um erro de

lógica ou o programa irá abortar.

Um ponteiro pode receber o endereço de uma

(4)

INICIALIZAÇÃO DE PONTEIROS

ERRO: não se pode mudar o valor para o qual o

ponteiro aponta sem que antes o ponteiro aponte

para algum lugar

ERRO: não existe como obter um valor para o qual

um ponteiro aponta se ele não aponta para lugar

nenhum

(5)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

INICIALIZAÇÃO DE PONTEIROS

Poderíamos ter inicializado o ponteiro ptr com o

valor NULL, já que não iremos usá-lo:

int* ptr = NULL; 

Então antes de acessar o ponteiro devemos fazer

um teste:

if(ptr != NULL) {

// podemos acessar o ponteiro

}

(6)

ALOCAÇÃO DINÂMICA DE MEMÓRIA

(7)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Vejamos o seguinte exemplo:

Estruturas de dados estáticas têm seu espaço pré-determinado em tempo de

compilação

Então, como criar um arranjo que saiba o tamanho durante a execução do

programa?

(8)

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Como alocamos arrays? Vejamos o exercício feito

(9)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Número de elementos definidos

inicialmente.

Alocação estática.

Caso o usuário utilize apenas 10

elementos do array o restante do

espaço alocado será desperdiçado.

No caso 40 bytes no mínimo.

(10)

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Podemos realizar a alocação dinâmica de memória

em tempo de execução

Existem alguns mecanismos que permitem fazer tal

alocação

Memória pode ser alocada em uma região de

memória chamada heap.

Memória alocada da heap DEVE ser devolvida

(11)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

RECAPITULANDO...

Como é a utilização de memória por um programa

C que está sendo executado?

Um programa C compilado cria e usa quatro regiões,

logicamente distintas na memória, que possuem

(12)

RECAPITULANDO...

Como é a utilização de memória por um programa

C que está sendo executado?

Região que contém todo o código

do programa que está sendo executado.

Região que contém as variáveis

(13)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

RECAPITULANDO...

Como é a utilização de memória por um programa

C que está sendo executado?

Endereço de retorno das chamadas de

função. Argumentos para as funções

e variáveis locais. Estado atual da CPU.

O heap é uma região de memória livre

que seu programa pode usar, via

alocação dinâmica, em aplicações

como listas encadeadas e árvores.

(14)

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Em C podemos contar com algumas funções para a

manipulação do heap.

Encontram-se na biblioteca stdlib.h

(15)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Malloc

Solicita memória ao sistema

Sintaxe

Retorno: ponteiro

sem tipo

para o início da área

alocada

(16)

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Free

Libera memória ao sistema

Sintaxe

void *p  ponteiro que aponta para o início de uma área alocada

por malloc.

(17)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Como alocar então espaço de memória para um

(18)

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Como ficaria o programa para soma do array? Parte

1

(19)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Como ficaria o programa para soma do array? Parte

2

O método para calcular a soma continuaria o mesmo

Vejam a importância da utilização de funções para a

(20)

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Faltou uma coisa muito importante no nosso

programa

(21)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Mais um exemplo – Alocação dinâmica de 100

caracteres

(22)

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Não, nem sempre é possível. Caso não conseguir

memória disponível para efetuar a alocação, a

função malloc retorna NULL.

(23)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

ALOCAÇÃO DINÂMICA DE MEMÓRIA

(24)

ALOCAÇÃO DINÂMICA DE MEMÓRIA

(25)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Alocação de x pontos flutuantes de precisão dupla. Ex completo com aritmética

de ponteiros

(26)

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Outras funções para alocação dinâmica

calloc – aloca um bloco de memória para um array

de n elementos do tamanho informado

Ex: calloc(50, sizeof(int));

O Código acima aloca um espaço na memória para 50

inteiros e

inicializa todos os bytes com 0

(27)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Outras funções para alocação dinâmica

realloc – muda o tamanho do bloco de memória

referenciado pelo ponteiro, reduzindo-o ou

expandindo-o

Ex:

float * p;

p = malloc(100 * sizeof(float));

...

p = realloc(p, 200 * sizeof(float));

O Código acima muda a alocação do ponteiro p

passando de 100 floats para 200 floats.

(28)

VETOR DE PONTEIROS

Podemos declarar um vetor de ponteiros, ou seja,

(29)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

VETOR DE PONTEIROS

Onde usar vetor de ponteiros?

Exemplos:

Imagine várias strings que precisam ser ordenadas. Se

fossem todas copiadas e ordenadas seqüencialmente a

cópia de dados na memória seria muito grande. Melhor

criarmos um array de ponteiros para as strings de forma

ordenada.

E se precisarmos das strings de forma ordenada e de forma

desordenada? Copiar todas as strings? Não, podemos

utilizar array de ponteiros

(30)

VETOR DE PONTEIROS

(31)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

FUNÇÕES QUE RETORNAR PONTEIROS

Se declararmos o método funcaoA como abaixo o

(32)

FUNÇÕES QUE RETORNAR PONTEIROS

Se declararmos o método funcaoA como abaixo o

que aconteceria?

(33)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

FUNÇÕES QUE RETORNAR PONTEIROS

E agora compila?

ERRO de compilação: atribuição a um vetor

COMPILA mas podem acontecer erros

durante a execução. Pode funcionar como

esperado porque o ponteiro ptr armazena

o endereço de uma área de memória que

já foi desalocada.

(34)

FUNÇÕES QUE RETORNAR PONTEIROS

(35)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

PROBLEMAS COM PONTEIROS

Ponteiros não inicializados

int x, *p;

x = 10;

(36)

PROBLEMAS COM PONTEIROS

Referência pendente

int *q;

int x;

int *ptr = malloc(...);

q = ptr;

free(q);

(37)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

PROBLEMAS COM PONTEIROS

Vazamento de memória

int *q;

int *ptr = malloc(...);

...

(38)

REFERÊNCIAS

Notas de Aula do Professor Romildo Malaquias

(DECOM/UFOP)

Notas de Aula do Professor Giori Ambrósio

C Completo e Total - 3ª edição

Referências

Documentos relacionados

É perceptível, desta forma, o constante aumento do aprofundamento dos personagens: os “príncipes” têm agora não só nome e falas, mas personalidades bem desenvolvidas,

Contribuições/Originalidade: A identificação dos atributos que conferem qualidade ao projeto habitacional e das diretrizes de projeto que visam alcançá-los, são de fundamental

MODELO ELITEPAD, MARCA HEWLETT PACKARD, DOCKING STATION D' ACCUEIL ELITEPAD, CARACTERÍSTICAS: QUATRO PORTAS USB 2.0; PORTAS HDMI E VGA, ETHERNET, SAÍDA DE ÁUDIO, TRAVA

Este trabalho tem como objetivo geral avaliar a quantidade de água pluvial que pode ser aproveitada após infiltrar em um pavimento permeável de concreto

Ainda, como forma de estudo de caso na cidade de Santa Rosa/RS, foi efetuada uma análise em relação à situação legal atual, com base no Plano Municipal de Saneamento

O fabricante não vai aceitar nenhuma reclamação dos danos causados pela não observação deste manual ou por qualquer mudança não autorizada no aparelho.. Favor considerar

Depois de se cultivar as variedades de soja Santa Rosa e UFV-1 em solução nutritiva "completa" e com deficiência de B, Cu e Zn, de se analisar as suas folhas e de

Liver resection, as well as biliary drainage, is commonly employed and represents the ideal procedure in the treatment of intrahepatic lithiasis because it can remove the