Reinaldo Gomes Alocação Dinâmica

Documentos relacionados
SSC304 Introdução à Programação Para Engenharias. Alocação Dinâmica. GE4 Bio

1/34 GESTÃO DINÂMICA DE MEMÓRIA

LINGUAGEM C: ALOCAÇÃO DINÂMICA

A linguagem C permite dois tipos de alocação de memória: Alocação estática e alocação dinâmica.

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Ponteiros. Introdução

Ponteiros. Introdução e Alocação Dinâmica

Ponteiros e Alocação Dinâmica. Prof. Péricles Miranda

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Programação Computacional Aula 16: Alocação Dinâmica de Memória

Programação. Cap. 12 Gestão de Memória Dinâmica

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Alocação Dinâmica. Introdução à Computação

Alocação Dinâmica em C

Linguagem C. Ponteiros. Alex Vidigal Bastos.

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Introdução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo

Estrutura de Dados. Aula 07 Alocação Dinâmica

INF1007: Programação 2. 2 Alocação Dinâmica. 17/02/2014 (c) Dept. Informática - PUC-Rio 1

BCC202 - Estrutura de Dados I

ALOCAÇÃO DINÂMICA DE MEMORIA Lista 10. A linguagem C/C++ possui recursos para alocação dinâmica de memoria.

Algoritmos e Estruturas de dados

Fundamentos de Programação

13. ALOCAÇÃO DINÂMICA DE MEMÓRIA

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

Aula 24 Ponteiros, vetores e structs

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Alocação Estática e Dinâmica. Prof. M.Sc. Mariella Berger

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Laboratório de Introdução à Ciência da Computação I

Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 11 Gestão de Memória Dinâmica

INF 1007 Programação II

Modulo 12: alocação dinâmica de memória

Linguagem C: Ponteiros - Alocação Dinâmica

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

Ponteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória

Professor: Jó Ueyama Estagiário PAE: Heitor Freitas

Alocação Dinâmica de Memória. Programação II

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Programação de Computadores II. Cap. 5 Alocação Dinâmica

Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores

Módulo 5 Vetores e Alocação Dinâmica

Programação de Computadores II

Laboratório de Programação II

Princípios de Desenvolvimento de Algoritmos MAC122

DAS5102 Fundamentos da Estrutura da Informação

Alocação Dinâmica de Memória - Exercício

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Ponteiros em C. Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1

Programação I Ponteiros e alocação dinâmica de memória. Prof. Carlos Alberto

Aula 25: Alocação Dinâmica

Estruturas dinâmicas Ponteiros

Ponteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Ponteiros. Baseado nos slides do Prof. Mauro.

Programação de Computadores II

Estruturas Dinâmicas - Ponteiros

ED1 - Aula 01 Introducao e revisão

1 Exercícios com ponteiros

Ponteiros & tabelas (cont.) K&R: Capítulo 5

Computação I - C Prova /10/ Profs. Adriano Cruz e Valeria Bastos

Introdução à Computação

MC-102 Aula 19 Ponteiros II

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Alocação de Memória

Aula 17: Ponteiros e Alocação Dinâmica em C

Gilberto A. S. Segundo. 24 de agosto de 2011

O que é um apontador em C (type pointer in C)?

Programação de Computadores II Lista de Exercícios 03

Plano de Aula Segunda-feira Tarde 13/10/2014 Objetivo: Introduzir o conceito de alocação dinâmica na memória e registros / structs.

1 Exercícios com ponteiros

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Curso de Programação C em Ambientes Linux Aula 05

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Métodos Computacionais. Vetores e Matrizes Dinâmicas

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória

Programação Procedimental GBC /1 Prof. Renan Cattelan Prática 10. Estruturas e alocação dinâmica

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

Linguagem C Apontadores. Endereços e apontadores Passagem de parâmetros para funções Apontadores e vectores Memória dinâmica

Ponteiros. prof. Fabrício Olivetti de França

Fundamentos de Programação

A sintaxe para se declarar uma variável do tipo ponteiro é dada por:

Alocação Dinâmica. Túlio Toffolo BCC202 Aula 02 Algoritmos e Estruturas de Dados I

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Alocação Dinâmica de Memória

ESTRUTURAS DE DADOS (LEI, LM, LEE) PROGRAMAÇÃO III (LTSI) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2017/2018

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Tipos Abstratos de Dados. Estrutura de Dados

BCC Introdu c ao ` a Programa c ao I Ponteiros Guillermo C amara-ch avez UFOP 1/61

Transcrição:

Algoritmos e Lógica de Programação Linguagem C Alocação Dinâmica i de Memória Reinaldo Gomes reinaldo@cefet-al.br Alocação Dinâmica Quando declaramos uma variável ou um arranjo, o compilador automaticamente aloca memória para armazená-los. Alocação estática (variáveis globais) Alocação dinâmica implícita (variáveis locais) Essa não é a única forma de se manter objetos na memória: Pode-se obter espaço de memória em tempo de execução (alocação dinâmica explícita) a partir da função malloc() da biblioteca C. Essa memória pode ser liberada tão logo não seja mais necessária: função free()

Alocação Dinâmica Definição: Recurso que permite alocar memória para variáveis em tempo de execução. Benefícios Definição de vetores e matrizes, de tamanho variável, cujo tamanho é descoberto em tempo de execução Existem quatro funções, padronizadas, da biblioteca <stdlib.h>, para manipulação de alocação de memória: malloc() calloc() free() realloc(); 3 Alocação Dinâmica Programas com alocação dinâmica são mais versáteis: só utilizam a memória quando necessário se adaptam aos recursos disponíveis Uso de apontadores Recebem endereço inicial da área de memória alocada As operações de acesso e alteração dos dados alocados dinamicamente é feito a partir dos apontadores O apontador será utilizado também quando se for fazer a liberação da área de memória alocada Biblioteca: <stdlib.h> ou <alloc.h> 4

malloc() Propósito: Essa função aloca um bloco de bytes (num) e retorna um ponteiro para void para o primeiro byte, que pode ser atribuído a qualquer tipo de ponteiro; void* malloc(unsigned int num) Parâmetro num tamanho em bytes a ser alocado Retorno void* apontador para qualquer tipo de ponteiro 5 malloc() Considerações Se não houver memória suficiente para alocar a memória requisitada, a função malloc() retorna um ponteiro pra NULL Ao alocar memória, verifique se realmente foi alocada, para isso compare com NULL Utilização: int *varint; if ((varint=(int*)malloc(sizeof(int)))== NULL){ printf( Erro na alocacao de memoria ); exit(1); } 6

malloc() Observação Ao alocar memória dinamicamente para uma struct, não some os valores dos seus membros e sim use o operador sizeof para descobrir o tamanho da estrutura; typedef struct { char nome[20]; int matricula; } funcionario; funcionario *emp; emp=(funcionario*) malloc(sizeof(funcionario)); Se não for mais precisar, libere a memória anteriormente alocada 7 free() Características Essa função libera uma área de memória previamente alocada; Tabela de Alocação Interna: Guardao número de bytes anteriormente alocados. void free(void *pointer) O uso de um apontador inválido pode derrubar o sistema!!!! Uso int *pt = (int*)malloc(sizeof(int)); *pt = 1500; free(pt); 8

malloc() e free() Um exemplo completo: #include <stdio.h> #include <stdlib.h> main() { float *pt; } pt = (float*)malloc(sizeof(float)); if (pt == NULL) { printf("erro de alocação\n"); exit(1); } *pt = 10.0; printf( Salario: %4.1f", *pt); free(pt); 9 Outras funções calloc() Aloca uma quantidade de memória igual a nvezes * tam (bloco de bytes), retornando um ponteiro para void para o primeiro byte, que pode ser atribuído a qualquer tipo de ponteiro void* calloc(size_t nvezes, size_t tam) Observação: Teste o retorno da alocação para ver se houve sucesso! 10

Outras funções Exercício 01 e Exercício 02 Faça um programa que aloque um vetor, dinamicamente, de tamanho n. Em seguida, faça a leitura dos n elementos e imprima todos os valores lidos. Obs: O exercício 1 manipula o vetor dinâmico como vetor O exercício 2 manipula o vetor dinâmico com um apontador 11 Outras funções realloc() Modifica o tamanho de memória previamente alocado, especificado por um ponteiro, para uma nova quantidade especificada void* realloc(void *pt, size_t novo_tam) Observações: * Se pt == NULL, alocanovo_tam bytes *Senovo_tam é igual a zero, a memória apontada por pt é liberada! 12