Windows Vista - Curso Completo - 1476 páginas Windows Server 2003 - Curso Completo SQL Server 2005 - Curso Completo 1500 Tutoriais de Informática Windows Vista - Curso Completo - 1476 páginas Curso Completo de Access Certificações Microsoft

Você está aqui: Principal » Lista Completa de Tutoriais

Sobre este Tutorial

Autor: Kátia Duarte
Data: 23-01-2006
Categoria: Programação
Assunto: C - BÁSICO
Visitas: 27079
E-mail: katchuskaduarte@yahoo.com.br
Site:
Avaliação: (43 votos)
1 2 3 4 5
Comentários: Ler / Escrever

Linguagem C – Alocação dinâmica

 

Objetivos

 

Neste artigo mostra o porque e como utilizar a alocação dinâmica.

 

Pré-requisitos

 

É necessário que o leitor tenha acompanhado o artigo anterior, pois os artigos obedecem a uma seqüência.

 

Nota: Este artigo faz parte do curso de “Linguagem C – Básico”.

 

Alocação dinâmica

 

A alocação dinâmica é o processo que aloca memória em tempo de execução. Ela é utilizada quando não se sabe ao certo quanto de memória será necessário para o armazenamento das informações, podendo ser determinadas em tempo de execução conforme a necessidade do programa. Dessa forma evita-se o desperdício de memória.

 

No padrão C ANSI existem 4 funções para alocações dinâmica pertencentes a biblioteca stdlib.h. São elas malloc(), calloc(), realloc() e free(). Sendo que as mais utilizadas são as funções malloc() e free(). Além das funções mencionadas acima existem outras que não serão abordadas neste tutorial, pois não são funções padrões.

 

A alocação dinâmica é muito utilizada em problemas de estrutura de dados, por exemplo, listas encadeadas, pilhas, filas, arvores binárias e grafos. As funções malloc() e calloc() são responsáveis por alocar memória, a realloc() por realocar a memória e por ultimo a free() fica responsável por liberar a memória alocada.

 

A sintaxe da função malloc() é dada por:

 

 

Esta função recebe como parâmetro “size” que é o número de bytes de memória que se deseja alocar. O tipo size_t é definido em stdlib.h como sendo um inteiro sem sinal. O interessante é que esta função retorna um ponteiro do tipo void podendo assim ser atribuído a qualquer tipo de ponteiro.

 

No exemplo abaixo, suponha que seja necessário no meio do código alocar uma memória com 150 bytes, para isto seria necessário digitar as seguintes linhas de código:

 

 

No programa abaixo podemos verificar alguns problemas que podem ser facilmente resolvidos se tivéssemos utilizado alocação dinâmica.

 

 

O exemplo acima é muito simples, mas demonstra em que situação deve utilizar alocação dinâmica. Analisando o programa mostrado vemos que não se sabe a quantidade de valores que a pessoa vai inserir no vetor por esse motivo declaramos um vetor muito grande. O problema está se a pessoa, por exemplo, deseja colocar apenas 3 elementos no vetor. Como o vetor foi declarado com o tamanho igual a 100, o que acontece é o desperdício de memória e caso passe de 100 haverá um estouro. Portanto a melhor solução seria utilizar alocação dinâmica, ou seja, toda vez que não se sabe ao certo a quantidade de elementos a serem utilizados deve-se utilizar a alocação dinâmica.

 

O mesmo exemplo mostrado anteriormente com o uso de alocação dinâmica (usando a função malloc() ) é mostrado logo abaixo:

 

 

Agora o usuário pode digitar o tamanho do vetor que quiser que não terá desperdício de memória e o vetor a ser alocado será do tamanho digitado pelo usuário.

 

A função malloc() utilizada no programa acima, cuja a sintaxe foi mostrada, devolve um ponteiro do tipo void, desta forma pode-se ser atribuído a qualquer tipo de ponteiro (no nosso exemplo é atribuído a um ponteiro do tipo inteiro). A memória alocada pela função malloc(), como também por outras funções que vamos ver no decorrer deste tutorial, devem ser obtida do heap. Heap é a região de memória livre do seu computador. Desta forma é necessário verificar se a memória livre do seu computador é suficiente para o armazenamento e isto pode ser feito da seguinte forma:

 

 

Caso a função malloc() devolver o valor nulo significa que não há memória suficiente e nesse caso o programa deve imprimir na tela a mensagem “Memória insuficiente” e imediatamente terminar o programa que é feito através da função exit().

 

A função free() usada neste e nos demais exemplos de alocação dinâmica serve para liberar a memória alocada. E sua sintaxe é a seguinte:

 

 

O p é um ponteiro que aponta para a memória alocada anteriormente, em nosso programa o ponteiro vet.

 

Agora veremos outras funções padrões de alocação dinâmica:

 

Calloc()

 

Esta função também tem como objetivo alocar memória e possui a seguinte sintaxe:

 

 

O num representa a quantidade de memória a ser alocada e o size é o seu tamanho. Esta função inicia o espaço alocado com 0. O exemplo anterior com o calloc() é feita alterando somente a seguinte linha:

 

 

A função sizeof() retorna o tamanho em bytes do tipo de dado, que no nosso exemplo é inteiro, isto é importante para que o programa seja considerado portável.

 

realloc()

 

Esta função é responsável por realocar a memória cuja a sintaxe é:

 

 

Desta forma pode-se altera o tamanho da memória anteriormente alocado por *p para o tamanho especificado por um novo valor (size). Veja o exemplo abaixo:

 

 

Neste ultimo programa usamos a função strcpy() que copia a string entre aspas para a string destino, que no nosso caso é uma variável com o nome de string. Para utilizar esta função foi necessário inserir no cabeçalho “#include <string.h>”. Existem outras funções para se trabalhar com string que serão explicados no próximo tutorial.

 

Nos exemplos aqui mostrado o system(“Pause”) tem o mesmo papel que o getch() e serve para que o programa de uma pausa. O comando "system" roda qualquer comando DOS. E por ultimo para se utilizar o system(“Pause”) é necessário inserir no cabeçalho “#include<stdlib.h>”.

 

Conclusão

 

Neste tutorial vimos em que situações devem utilizar a alocação dinâmica e como elas são importantes para diversas aplicações.

 

 

LISTA DE TODOS OS TUTORIAIS DISPONÍVEIS

 

CURSO EM FORMATO DE VÍDEO-AULA
EXEMPLOS PRÁTICOS PASSO A PASSO COM SOM E IMAGEM
Clique no curso para informações detalhadas
Curso Duração Mais informações
DVD - Conversão de Formatos Digitais: Áudio e Vídeo 1 h 26 min Clique aqui
DVD - Curso de Oratória - Falando em Público sem Medo 33 min Clique aqui
Vídeo-Aula - Access 2007 Básico 2 h 1 min Clique aqui
Vídeo-Aula - Aprenda a Criar uma Agenda Telefônica no Excel 40 min Clique aqui
Vídeo-aula - Concursos: Inglês ESAF - Simulados e Provas Comentadas 2 h Clique aqui
Vídeo-Aula - Criação de Sites - Curso Básico 2 h 53 min Clique aqui
Vídeo-Aula - Curso Autocad 2D 4 h Clique aqui
Vídeo-Aula - Curso Autocad 3D 3 h 45 min Clique aqui
Vídeo-Aula - Curso Avançado de Access 2003 2 h 48 min Clique aqui
Vídeo-Aula - Curso Avançado de Excel 2003 3 h 41 min Clique aqui
Vídeo-Aula - Curso Avançado de Word 2003 1 h 34 min Clique aqui
Vídeo-Aula - Curso Básico de Access 2003 2 h 49 min Clique aqui
Vídeo-Aula - Curso Básico de Excel 2003 3 h 3 min Clique aqui
Vídeo-Aula - Curso Básico de PowerPoint 2003 2 h 22 min Clique aqui
Vídeo-Aula - Curso Básico de Windows XP 2 h 36 min Clique aqui
Vídeo-Aula - Curso Básico de Word 2003 2 h 14 min Clique aqui
Vídeo-Aula - Curso de Microinformática Prática 4 h 35 min Clique aqui
Vídeo-Aula - Curso de Teoria Musical 2 h 50 min Clique aqui
Vídeo-Aula - Curso Prático de Internet 40 min Clique aqui
Vídeo-Aula - Curso Profissional Photoshop 4 h 20 min Clique aqui
Vídeo-Aula - Excel 2007 - Curso Avançado 2 h 30 min Clique aqui
Vídeo-Aula - Excel 2007 - Curso Básico 2 h 35 min Clique aqui
Vídeo-Aula - Excel Para Concursos - Simulados e Provas Comentadas 2 h Clique aqui
Vídeo-Aula - Flash CS3 - Básico e Prático 4 h 45 min Clique aqui
Vídeo-Aula - Flash MX - Curso Básico 2 h 26 min Clique aqui
Vídeo-Aula - Fórmulas e Funções Matriciais no Excel 2 h 30 min Clique aqui
Vídeo-Aula - HTML - Curso Prático 2 h 40 min Clique aqui
Vídeo-Aula - Lógica de Programação - Curso Completo 22 h 15 min Clique aqui
Vídeo-Aula - Matemática Financeira - Teoria e Prática 9 h 10 min Clique aqui
Vídeo-Aula - Outlook Express – Curso Prático 55 min Clique aqui
Vídeo-Aula - PHP + HTML + CSS - Curso Completo 27 h 35 min Clique aqui
Vídeo-Aula - Programação VBA no Excel 2 h 54 min Clique aqui
Vídeo-Aula - Tudo Sobre Gráficos no Excel 9 h Clique aqui
Vídeo-Aula - Windows XP Básico + Intermediário + Dicas Práticas 8 h Clique aqui
Vídeo-Aula - Word 2007 - Curso Básico 2 h 23 min Clique aqui
Vídeo-Aula interativa: Tudo Sobre Tabelas Dinâmicas no Excel 2003 2 h 30 min Clique aqui
LIVROS CAMPEÕES DE VENDA NO SITE
Dossiê Hacker
Universidade Project
Loja de Livros

© Júlio Battisti, 2001 - 2008. Todos os direitos reservados.
É expressamente proibida a reprodução total ou parcial do conteúdo deste site e dos textos disponíveis, seja através de mídia eletrônica, impressa, ou qualquer outra forma de distribuição. Os infratores serão indiciados e punidos com base na lei nº 9.610 de 19/02/1998. Este tutorial só pode ser publicado no site www.juliobattisti.com.br e no site do Autor do tutorial. Nenhum outro site tem permissão para copiar e publicar este tutorial, mesmo que sejam mantidas todas as referências ao autor e ao site www.juliobattisti.com.br. Não é permitida a publicação deste tutorial em nenhum outro site.