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

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

Estruturas dinâmicas Ponteiros

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

Estruturas Dinâmicas - Ponteiros

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

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

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

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

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

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

Alocação Dinâmica em C

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

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

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

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

Ponteiros. Introdução

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

LINGUAGEM C: ALOCAÇÃO DINÂMICA

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

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

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

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

Linguagem C. Ponteiros. Alex Vidigal Bastos.

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

Reinaldo Gomes 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.

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

Alocação dinâmica de Memória

Princípios de Desenvolvimento de Algoritmos MAC122

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

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

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

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

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

1 Exercícios com ponteiros

DAS5102 Fundamentos da Estrutura da Informação

Fundamentos de Programação

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

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

1 Exercícios com ponteiros

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

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

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

MC-102 Aula 19 Ponteiros II

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

AULA 6. Conceitos. Melhores momentos. Conceitos. Conceitos. Conceitos. Conceitos

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

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

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

Ponteiros. Baseado nos slides do Prof. Mauro.

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

Aula 25: Alocação Dinâmica

Exercícios sobre textos; Alocação dinâmica.

Fundamentos de Programação

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

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Instituto Federal da Bahia Análise e Desenvolvimento de Sistemas INF029 Laboratório de Programação Aula 03: Ponteiros

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

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

- Mapa de memória de um processo - Ponteiros

Ponteiros e Alocação de Memória

Função "malloc" e "calloc":

Correção dos exercícios

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

Estruturas de Dados. Profa. Juliana Pinheiro Campos

INF 1007 Programação II

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

Aula 24 Ponteiros, vetores e structs

Linguagem C Ponteiros

Laboratório de Programação II

ED1 - Aula 01 Introducao e revisão

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

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

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

Programação de Computadores II

Ponteiros. Considere um carteiro recém-chegado na vila Na vila, a referência para se encontrar a casa é pelo morador

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

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

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

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

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

Programação de Computadores II

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

Algoritmos e Estruturas de dados

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

Estrutura de dados 1. Ponteiros

Tipos Abstratos de Dados. Estrutura de Dados

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

Princípios de Desenvolvimento de Algoritmos MAC122

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

Ponteiros e Tabelas. K&R: Capítulo 5

Laboratório de Introdução à Ciência da Computação I Aula de Vetores e Matrizes

Preferível sempre que não soubermos quanta memória um programa utilizará

Programação II. Aula 1

Métodos Computacionais. Vetores e Matrizes Dinâmicas

BCC202 - Estrutura de Dados I

Transcrição:

Laboratório de Introdução à Ciência da Computação I Aula 12 Alocação dinâmica de memória Professor: Jó Ueyama Estagiária PAE: Aurea Soriano slide 1

Funções para alocação de memória malloc(), calloc(), realloc(), free() São funções utilizadas para trabalhar com alocação dinâmica (em tempo de execução) de memória A memória é alocada a partir de uma área conhecida como heap slide 2

Malloc //void *malloc(size_t size); Size = tamanho do bloco de memória em bytes Retorna um ponteiro para o bloco de memória alocado Quando não conseguir alocar a memória, retorna um ponteiro nulo A região alocada contém valores desconhecidos Sempre verifique o valor de retorno! slide 3

Malloc #include <stdlib.h> type-casting: void2char char *str; if((str = (char *)malloc(100)) == NULL) { printf("espaco insuficiente para alocar buffer \n"); exit(1); } printf("espaco alocado para str\n"); slide 4

Malloc #include <stdlib.h> int *num; if((num = (int *)malloc(50 * sizeof(int))) ==NULL) { printf("espaco insuficiente para alocar buffer \n"); exit(1); } printf("espaco alocado para num\n"); slide 5

Calloc //void * calloc ( size_t num, size_t size ); A função calloc() aloca um bloco de memória para um array de num elementos, sendo cada elemento de tamanho size A região da memória alocada é inicializada com o valor zero A função retorna um ponteiro para o primeiro byte Se não houver alocação, retorna um ponteiro nulo slide 6

Calloc #include <stdlib.h> unsigned int num; int *ptr; printf("digite o numero de variaveis do tipo int: "); scanf("%d", &num); if((num = (int *)calloc(num, sizeof(int))) == NULL) { printf("espaco insuficiente para alocar \ num\ \n"); exit(1); } printf("espaco alocado com o calloc\n"); slide 7

Realloc //void * realloc (void * ptr, size_t size ); A função realloc() aumenta ou reduz o tamanho de um bloco de memória previamente alocado com malloc() ou calloc() O argumento ptr aponta para o bloco original de memória e o size indica o novo tamanho desejado em bytes slide 8

Realloc Possíveis retornos: Se houver espaço para expandir, a memória adicional é alocada e retorna ptr Se não houver espaço suficiente para expandir o bloco atual, um novo bloco de tamanho size é alocado numa outra região da memória e o conteúdo do bloco original é copiado para o novo. O espaço de memória do bloco original é liberado e a função retorna um ponteiro para o novo bloco slide 9

Realloc Possíveis retornos (continuação): Se o argumento size for zero, a memória indicada por ptr é liberada e a função retorna NULL Se não houver memória suficiente para a realocação (nem para um novo bloco), a função retorna NULL e o bloco original permanece inalterado Se o argumento ptr for NULL, a função atua como um malloc() slide 10

Exemplo: calloc seguido de realloc unsigned int num; int *ptr; printf("digite o numero de variaveis do tipo int: "); scanf("%d", &num); if((ptr = (int *)calloc(num, sizeof(int))) == NULL){ printf("espaco insuficiente para alocar \"num\" \n"); exit(1); } //duplica o tamanho da região alocada para ptr if((ptr = (int *)realloc(ptr, 2*num*sizeof(int))) == NULL){ printf("espaco insuficiente para alocar \"num\" \n"); exit(1); } printf("novo espaço \ realocado\ com sucesso\n"); slide 11

Free //void free ( void * ptr ); Desaloca /libera um espaço de memória previamente alocado usando malloc, calloc ou realloc, tornando-o disponível para uso futuro A função deixa o valor de ptr inalterado, porém apontando para uma região inválida (note que o ponteiro não se torna NULL) Se for passado um ponteiro nulo, nenhuma ação será realizada Ex: free(ptr); slide 12

Exercício Escreva um programa que aloque a memória para cada caractere digitado pelo usuário e imprima no final o texto completo Implemente um código capaz de realizar a soma de duas matrizes, sendo os tamanhos e os conteúdos das mesmas informado pelo usuário slide 13