Alocação Dinâmica de Memória

Slides:



Advertisements
Apresentações semelhantes
Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de.
Advertisements

Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Algoritmos de manipulação de estruturas elementares de dados
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Programação II Estruturas de Dados
TADS – Tipos Abstratos de Dados
Alocação Dinâmida de Memória
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Alocação Dinâmica de Memória
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Universidade de Brasília
Ponteiros em Linguagem C
Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Slides: Prof. João Fabro UTFPR - Curitiba
Fundamentos de Programação 1
Escola Secundária c/ 3º CEB da Batalha
Programação em Assembly Variáveis estruturadas
Listas Encadeadas.
Vetor de Ponteiros Exemplo de Alocação. Escrever Vetor de Vetores de floats int main() { int i, k, n; float **vetor; // vetor de vetores int *tamanho;
Alocação Dinâmica de Memória
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
Alocação Dinâmica de Memória Professor Mário Dantas
APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.
Ponteiros Variáveis do tipo “ponteiro” armazenam endereços de memória
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Gestão dinâmica de memória
Linguagem de Programação II Parte IX
Definição de Tipos Estruturas e Ponteiros
Estruturas de Dados com Jogos
INTELIGÊNCIA ARTIFICIAL
TAD Pilha com Alocação Dinâmica de Memória
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Alocação Dinâmica de Memória
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Aula 3 Vetores e Listas. Arrays (vetores) Array – sequência de elementos do mesmo tipo. Tamanho do Array – seu número de elementos (número fixo) Consequência:
Estruturas de Dados Aula 5: Matrizes
Estruturas de Dados Aula 9: Listas (parte 1)
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Ambiente de Execução - Rotinas
Estruturas de Dados Aula 11: TAD Pilha
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Estruturas de Dados Aula 17: Estruturas Genéricas
1 Alocação Dinâmica Quando se declara arrays o tamanho deve ser fixo e definido primeiramente –Alocação estática Pode-se alocar dinamicamente o espaço.
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Algoritmos e Estruturas de Dados
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Prof. Alessandro Gonçalves
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Programação de Computadores I – Ponteiros Profa. Mercedes Gonzales Márquez.
Leandro Almeida  As declarações abaixo alocam memória para diversas variáveis.  A alocação é estática, pois acontece antes que o programa.
Ponteiros em C Prof. Kariston Pereira
Ponteiros. Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1.
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Programação em C Aula 9.
ponteiros Estrutura de Dados Prof. André Cypriano M. Costa
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Jean Carlo Mendes
Transcrição da apresentação:

Alocação Dinâmica de Memória

Objetivos Utilizar espaços da memória de tamanho arbitrário Criar estruturas de dados usando encadeamento.

Motivação Alocação de espaço sob demanda: Muitas vezes o espaço de memória necessário para um conjunto de dados varia durante a execução do programa. Encadeamento prove um estilo eficiente de representar conjuntos de dados em C e para implementar as estruturas de armazenamento de Tipos Abstratos de Dados

Funções para alocação Dinâmica Funções principais malloc() – Aloca um espaço na memória e retorna um ponteiro para o espaço alocado free() - Libera espaço alocado na memória para que possa ser utilizados por outras aplicações ou por outras chamadas de malloc.

Exemplo Alocação Estática Alocação Dinâmica void alocdin(){ int *a; void alocestat(){ int a[100]; int n,i; puts("Informe o número de elementos a serem lidos:"); scanf("%d", &n); for(i=0; i<n;i++) { scanf("%d",&a[i]); } Alocação Dinâmica void alocdin(){ int *a; int n,i; puts("Informe o número de elementos a serem lidos:"); scanf("%d", &n); a = malloc(n*sizeof(int)); if(a== NULL){ puts("Erro de alocação de memória.\n"); system("PAUSE"); exit(0); } for(i=0; i<n;i++) { scanf("%d",&a[i]);

Exemplo – Alocando um Vetor de inteiros void alocdin2(){ int *a; int n,i; puts("Informe o número de elementos a serem lidos:"); scanf("%d", &n); a = malloc(n*sizeof(int)); if(a== NULL){ puts("Erro de alocação de memória.\n"); system("PAUSE"); exit(0); } for(i=0; i<n;i++) { scanf("%d",a+i);

Exemplo – Alocando um Vetor de caracteres void alocdinchar(){ char *a; int n,i; puts("Informe o número de elementos a serem lidos:"); scanf("%d", &n); a = malloc(n); // não precisa especificar o tamanho if(a== NULL){ puts("Erro de alocação de memória.\n"); system("PAUSE"); exit(0); } for(i=0; i<n;i++) { scanf("%c",a+i);

Alocando um vetor de float ou double, float *a; int n,i; scanf("%d", &n); a = malloc(n*sizeof(float)); ou double *a; a = malloc(n*sizeof(double));

Alocando um vetor de Estruturas struct Pessoa{ int idade; char nome[10]; float altura; float peso; } p1,p2; void alocdinstruct(){ Pessoa *a; int n,i; puts("Informe o número de elementos a serem lidos:"); scanf("%d", &n); a = malloc(n*sizeof(struct Pessoa));

Alocando um Vetor de Estruturas typedef struct { int x,y; } Ponto; Ponto *a; int n,i; puts("Informe o número de elementos a serem lidos:"); scanf("%d", &n); a = malloc(n*sizeof(Ponto));

Apontadores e espaços alocados Seja a declaração: int *a; a = malloc(10*sizeof(int)); Depois que a alocação foi feita não é possível aumentar o tamanho do espaço alocado. Porém, é possível fazer o ponteiro apontar para outro espaço. Assim na seqüência: a = malloc(10*sizeof(int)); ... a = malloc(20*sizeof(int)); ... a = malloc(5*sizeof(int)); Os espaços alocados pelas duas primeiras chamadas de malloc ficarão “perdidos”, ficam alocados e sem uma referência para acessá-los.

Liberando espaço com free Sempre que um espaço alocado fica sem referência este é perdido, não podendo ser utilizado novamente, nem pelo programa que o alocou nem por outros programas em execução na memória. Antes de fazer um apontador apontar para outro espaço, o espaço que este aponta deve ser liberado com free: a = malloc(10*sizeof(int)); .... free(a); a = malloc(20*sizeof(int)); a = malloc(5*sizeof(int));

Liberando espaço com free A função free libera espaços contíguos alocados por malloc. No exemplo a = malloc(10*sizeof(int)); .... free(a); free vai liberar todos o bloco de memória de equivalente ao que foi alocado por malloc. (10 * o tamanho de um inteiro)

Exercício Escreva um programa que contenha um conjunto de funções para manipular imagens. Neste programa uma imagem é um vetor de pontos, podendo ter milhões de pontos. Um ponto possui a seguinte estrutura: Um par de coordenadas (x,y). x e y são inteiros Uma cor. cor é um inteiro (short) de 0 a 255).

Exercício Você deve: declarar uma estrutura do tipo ponto. Considerar que os pontos de uma imagem serão guardados em um vetor dinâmico do tipo ponto. Implementar as operações: lê figura de um arquivo texto (arquivo texto contendo um conjunto de pontos, precedido pelo número de pontos) Modifica cor de um ponto; Modifica cor da figura; Imprime conjunto de pontos da figura; Salva figura no arquivo;