Buscar

Aula4-AlocacaDinamica

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

*
*
*
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
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;
int n,i;
scanf("%d", &n);
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));
....
free(a);
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;

Outros materiais