SlideShare uma empresa Scribd logo
1 de 29
Alocação Dinâmica em Linguagem C
LINGUAGEM C
Alocação Dinâmica
Glécio Rodrigues de Albuquerque
glecioalbuquerque@gmail.com
Alocação Dinâmica em Linguagem C
Conteúdo
• Alocação Estática
• Alocação Dinâmica
• Malloc
• Sizeof
• Free
• Alocação de Vetores
• Alocação de Matrizes
• Calloc
• Realloc
• Exercício
Alocação Dinâmica em Linguagem C
Alocação Estática
• Na execução de um programa geralmente precisamos
armazenar dados temporariamente na memória. Para
isso, lançamos mão das variáveis de memória.
• As variáveis de memórias são declaradas através da
determinação de um tipo de dado e seu identificador
(nome), podendo ainda ser seguida de seu valor inicial
(default).
Alocação Dinâmica em Linguagem C
Alocação Estática
• No exemplo anterior, as variáveis são definidas utilizando
alocação estática.
• Em tempo de compilação já é conhecida a quantidade de
memória que será necessária para a execução do
programa.
• Ao iniciar o programa, toda a memória necessária para a
sua execução será alocada.
• Acontece que, às vezes, a quantidade de memória a
alocar só se torna conhecida durante a execução do
programa. Para lidar com essa situação é preciso
recorrer à alocação dinâmica de memória.
Alocação Dinâmica em Linguagem C
Alocação Dinâmica
• A alocação dinâmica é o processo utilizado para se
alocar memória em tempo de execução.
• É utilizada quando não se sabe ao certo quanto de
memória será necessário para o armazenamento dos
dados, podendo ser determinado em tempo de execução
conforme a necessidade do programa.
• Outro ponto é a econômica de memória, já que é alocada
apenas a quantidade de memória necessária para a
operação.
• A alocação dinâmica é muito utilizada em problemas de
estruturas de dados, a exemplo de listas encadeadas e
arvores, entre outros.
Alocação Dinâmica em Linguagem C
Alocação dinâmica
• Para trabalharmos com alocação dinâmica em linguagem
C, fazemos uso das seguintes funções:
• malloc
• calloc
• realloc
• free
• Além dessas funções, fazemos uso do operador sizeof.
• Também, na alocação dinâmica, o conceito de
ponteiros é bastante utilizado.
Alocação Dinâmica em Linguagem C
• Ponteiro é um tipo de dado especial que armazena um
endereço de memória. Possui um tipo e é precedido do
simbolo “*”.
• Exemplo de uso de um ponteiro e seu comportamento na
memória:
Ponteiros
Alocação Dinâmica em Linguagem C
Malloc
• A função malloc aloca um bloco de bytes consecutivos
na memória do computador e devolve o endereço do
primeiro byte desse bloco.
• O número de bytes é especificado como argumento da
chamada da função.
• A função malloc retorna um ponteiro de tipo genérico,
void *, cabendo ao programador fazer um type casting
para o tipo apropriado.
• No seguinte fragmento de código, malloc aloca 01 byte:
Alocação Dinâmica em Linguagem C
Malloc
• Neste outro código, a função malloc é utilizada para
alocar espaço de memória para um valor inteiro e um
valor double:
Alocação Dinâmica em Linguagem C
Malloc
• No caso de alocarmos espaço de memória pra um
registro (struct), precisamos saber a quantidade total
de bytes necessários para armazenar a estrutura na
memória.
• Para facilitar esta tarefa, fazemos uso do operador
sizeof.
Alocação Dinâmica em Linguagem C
Sizeof
• O operador sizeof retorna um inteiro, informando o
tamanho, em bytes, do tipo de dados passado como
argumento:
Alocação Dinâmica em Linguagem C
Sizeof
• Exemplos anteriores aplicando o operador sizeof:
Alocação Dinâmica em Linguagem C
NULL
• Se a memória do computador já estiver toda ocupada,
malloc não consegue alocar mais espaço e devolve
NULL.
• Convém verificar essa possibilidade antes de prosseguir:
Alocação Dinâmica em Linguagem C
Free
• As variáveis alocadas estaticamente dentro de um
escopo de código são desalocadas automaticamente
quando a execução do escopo termina.
• Já as variáveis alocadas dinâmicamente continuam a
existir mesmo depois que a execução do escopo termina.
• Para liberarmos a memória ocupada por essas variáveis,
é preciso recorrer à função free.
• A função free recebe como parâmetro um ponteiro para
o endereço inicial da memória que será desalocada.
Alocação Dinâmica em Linguagem C
Free
• A função free libera a porção de memória alocada por
malloc. O comando avisa ao sistema que o bloco de
bytes apontado por idade está livre. A próxima
chamada de malloc poderá tomar posse desses bytes.
Alocação Dinâmica em Linguagem C
Alocando Vetores
• Como já vimos, é possível alocar, além de variáveis
simples, estruturas mais complexas, a exemplo de
registros.
• É possível também trabalharmos dinâmicamente com
outros tipos de estruturas, como por exemplo os vetores.
• De acordo com a norma ANSI, o trecho de código a
seguir não é a forma correta de se declarar um vetor, a
menos que n seja uma constante, definida por const ou
#define.
Alocação Dinâmica em Linguagem C
Alocando Vetores
• O exemplo a seguir mostra como podemos alocar e
desalocar um vetor com n elementos inteiros durante a
execução de um programa:
Alocação Dinâmica em Linguagem C
Alocando Matrizes
• Outra exemplo de estruturas onde podemos utilizar
alocação dinâmica são as matrizes.
• Matrizes bidimensionais são implementadas como
vetores de vetores.
• Uma matriz com n linhas e m colunas é um vetor onde
cada elemento de n é um vetor de m elementos.
• Isto significa que temos um vetor de n posições de
poteiros, onde cada posição de n vai apontar para um
vetor de m posições do tipo de dado da matriz.
Alocação Dinâmica em Linguagem C
Alocando Matrizes
• Exemplo da alocação dinâmica de uma matriz n x m:
Alocação Dinâmica em Linguagem C
Desalocando Matrizes
• Exemplo de desalocação da matriz n x m alocada
anteriormente:
Alocação Dinâmica em Linguagem C
Calloc
• Assim como malloc, calloc tem a função de alocar
espaços na memória. Sua principal diferença é que a
mesma inicializa com zeros os bits das posições de
memórias alocadas.
• Outro ponto é que o uso de calloc facilita a alocação de
estruturas como vetores e matrizes.
• Está definida da seguinte forma:
• A função calloc recebe como parâmetros dois inteiros
sem sinal. O primeiro indica a quantidade de dados que
se pretende alocar e o segundo, o tamanho, em bytes, de
cada dado que será alocado.
Alocação Dinâmica em Linguagem C
Calloc
• No trecho de código a seguir é alocado um vetor de
inteiros com 5 posições através da função calloc:
• É importante observar que, da mesma forma como
acontece com malloc, caso a alocação não seja
efetivada, ao invés de retornar um ponteiro a função irá
retornar o valor NULL.
Alocação Dinâmica em Linguagem C
Realloc
• A função realloc permite alocar ou realocar um
espaço de memória.
• Pode ser utilizada em casos onde se deseja aumentar ou
diminuir o espaço de memória previamente alocado.
• Está definida da seguinte forma:
• A função recebe um ponteiro para o qual se deseja alocar
ou realocar e a quantidade de memória, em bytes,
necessária para a operação.
• Assim como malloc e calloc, realloc retorna um
ponteiro para o primeiro byte da memória alocada ou o
valor NULL.
Alocação Dinâmica em Linguagem C
Realloc
• Exemplo de uso da função realloc:
Alocação Dinâmica em Linguagem C
Realloc
• Alocando e desalocando com realloc:
Alocação Dinâmica em Linguagem C
Praticando
1. Escreva um programa que leia um número inteiro
positivo n, indicando a quantidade de inteiros que
serão lidos, e imprima-os em ordem invertida. Por
exemplo, ao receber
5, 222, 333, 444, 555 e 666
seu programa deve imprimir
666, 555, 444, 333, 222 e 5
Alocação Dinâmica em Linguagem C
Códigos e exercícios
https://drive.google.com/folderview?
id=0BxsDe2LkW3V2cExTTTE3YWhmLTg&usp=sharing
Alocação Dinâmica em Linguagem C
Referências
CPLUSPLUS. C Standard General Utilities Library. Disponível
em: http://www.cplusplus.com/reference/cstdlib/. Acessado em:
10/07/2015.
LINGUAGEMCDESCOMPLICADA. Linguagem C. Disponível
em:
https://programacaodescomplicada.wordpress.com/indice/lingua
gem-c/. Acessado em: 10/07/2015.
MEDINA, Marco. FERTIG, Cristina. Algoritmos e
Programação: Teoria e prática. São Paulo: Novatec, 2006.
SCHILDT, Herbert. C Completo e Total. 3.ed. Makron Books do
Brasil Editora, São Paulo, 1996.
Alocação Dinâmica em Linguagem C
Obrigado!!!

Mais conteúdo relacionado

Mais procurados

Programação orientada a objectos
Programação orientada a objectosProgramação orientada a objectos
Programação orientada a objectosValdinho Pereira
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e TkCarlos Campani
 
Resolução da Lista de exercícios - Conversão de bases e aritmética computacional
Resolução da Lista de exercícios - Conversão de bases e aritmética computacionalResolução da Lista de exercícios - Conversão de bases e aritmética computacional
Resolução da Lista de exercícios - Conversão de bases e aritmética computacionalVitor Hugo Melo Araújo
 
Java introdução ao eclipse
Java   introdução ao eclipseJava   introdução ao eclipse
Java introdução ao eclipseArmando Daniel
 
Curso de Informatica Básica - Noções básicas de um computador
Curso de Informatica Básica - Noções básicas de um computadorCurso de Informatica Básica - Noções básicas de um computador
Curso de Informatica Básica - Noções básicas de um computadorPerondi15
 
Minicurso PHP básico
Minicurso PHP básicoMinicurso PHP básico
Minicurso PHP básicoCezar Souza
 
Matemática Discreta - Introdução
Matemática Discreta - IntroduçãoMatemática Discreta - Introdução
Matemática Discreta - IntroduçãoUlrich Schiel
 
Apostila parte 1 informatica basica pdf
Apostila parte 1   informatica basica pdfApostila parte 1   informatica basica pdf
Apostila parte 1 informatica basica pdfJohnAguiar11
 
Arquitetura e Organização de Computadores: Evolução e Desempenho de Computadores
Arquitetura e Organização de Computadores: Evolução e Desempenho de ComputadoresArquitetura e Organização de Computadores: Evolução e Desempenho de Computadores
Arquitetura e Organização de Computadores: Evolução e Desempenho de ComputadoresWellington Oliveira
 
Arquitetura de Computadores
Arquitetura de ComputadoresArquitetura de Computadores
Arquitetura de Computadorespedroetec
 
MC - Aula 05 - Memória e Dispositivos de Armazenamento
MC - Aula 05 - Memória e Dispositivos de ArmazenamentoMC - Aula 05 - Memória e Dispositivos de Armazenamento
MC - Aula 05 - Memória e Dispositivos de ArmazenamentoFelipe J. R. Vieira
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução BásicaChristian Perone
 
Programação básica de microcontroladores
Programação básica de microcontroladoresProgramação básica de microcontroladores
Programação básica de microcontroladoresDanilo Morais Pagano
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX Sérgio Souza Costa
 
O computador pessoal – perguntas e respostas
O computador pessoal – perguntas e respostasO computador pessoal – perguntas e respostas
O computador pessoal – perguntas e respostasvinivs
 

Mais procurados (20)

Programação orientada a objectos
Programação orientada a objectosProgramação orientada a objectos
Programação orientada a objectos
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e Tk
 
Glossário de Termos Técnicos em Redes de Computadores
Glossário de Termos Técnicos em Redes de ComputadoresGlossário de Termos Técnicos em Redes de Computadores
Glossário de Termos Técnicos em Redes de Computadores
 
Resolução da Lista de exercícios - Conversão de bases e aritmética computacional
Resolução da Lista de exercícios - Conversão de bases e aritmética computacionalResolução da Lista de exercícios - Conversão de bases e aritmética computacional
Resolução da Lista de exercícios - Conversão de bases e aritmética computacional
 
Java introdução ao eclipse
Java   introdução ao eclipseJava   introdução ao eclipse
Java introdução ao eclipse
 
Curso de Informatica Básica - Noções básicas de um computador
Curso de Informatica Básica - Noções básicas de um computadorCurso de Informatica Básica - Noções básicas de um computador
Curso de Informatica Básica - Noções básicas de um computador
 
Minicurso PHP básico
Minicurso PHP básicoMinicurso PHP básico
Minicurso PHP básico
 
Matemática Discreta - Introdução
Matemática Discreta - IntroduçãoMatemática Discreta - Introdução
Matemática Discreta - Introdução
 
O compilador dev c++
O compilador dev c++O compilador dev c++
O compilador dev c++
 
Apostila parte 1 informatica basica pdf
Apostila parte 1   informatica basica pdfApostila parte 1   informatica basica pdf
Apostila parte 1 informatica basica pdf
 
Arquitetura e Organização de Computadores: Evolução e Desempenho de Computadores
Arquitetura e Organização de Computadores: Evolução e Desempenho de ComputadoresArquitetura e Organização de Computadores: Evolução e Desempenho de Computadores
Arquitetura e Organização de Computadores: Evolução e Desempenho de Computadores
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScriptCurso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
 
Arquitetura de Computadores
Arquitetura de ComputadoresArquitetura de Computadores
Arquitetura de Computadores
 
MC - Aula 05 - Memória e Dispositivos de Armazenamento
MC - Aula 05 - Memória e Dispositivos de ArmazenamentoMC - Aula 05 - Memória e Dispositivos de Armazenamento
MC - Aula 05 - Memória e Dispositivos de Armazenamento
 
Aula01 - Logica de Programação
Aula01 - Logica de ProgramaçãoAula01 - Logica de Programação
Aula01 - Logica de Programação
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
 
Programação básica de microcontroladores
Programação básica de microcontroladoresProgramação básica de microcontroladores
Programação básica de microcontroladores
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
O computador pessoal – perguntas e respostas
O computador pessoal – perguntas e respostasO computador pessoal – perguntas e respostas
O computador pessoal – perguntas e respostas
 

Destaque (11)

Apostila de Alocação Dinâmica em C
Apostila de Alocação Dinâmica em CApostila de Alocação Dinâmica em C
Apostila de Alocação Dinâmica em C
 
Máquina de Turing reconhecedora de número primo
Máquina de Turing reconhecedora de número primoMáquina de Turing reconhecedora de número primo
Máquina de Turing reconhecedora de número primo
 
Função malloc
Função mallocFunção malloc
Função malloc
 
Pged 02
Pged 02Pged 02
Pged 02
 
Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memória
 
Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Aula 4 vetores
Aula 4  vetoresAula 4  vetores
Aula 4 vetores
 
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memóriaEstrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
 
Vetores
VetoresVetores
Vetores
 
Aula 21 vetores
Aula 21   vetoresAula 21   vetores
Aula 21 vetores
 

Semelhante a Alocação Dinâmica em Linguagem C

Semelhante a Alocação Dinâmica em Linguagem C (20)

Estrdado materia-06-alocacao-de-memoria1
Estrdado materia-06-alocacao-de-memoria1Estrdado materia-06-alocacao-de-memoria1
Estrdado materia-06-alocacao-de-memoria1
 
Gabarito da P1 de PROG
Gabarito da P1 de PROGGabarito da P1 de PROG
Gabarito da P1 de PROG
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 
Java memory model primary ref. - faq
Java memory model   primary ref. - faqJava memory model   primary ref. - faq
Java memory model primary ref. - faq
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Linguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação JavaLinguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação Java
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
apostila matlab
apostila matlabapostila matlab
apostila matlab
 
Funções em C
Funções em CFunções em C
Funções em C
 
Ponteiros2
Ponteiros2Ponteiros2
Ponteiros2
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-c
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Aula2
Aula2Aula2
Aula2
 
Introdução a linguagem de programação C
Introdução a linguagem de programação CIntrodução a linguagem de programação C
Introdução a linguagem de programação C
 
47612195 apostila-de-scilab
47612195 apostila-de-scilab47612195 apostila-de-scilab
47612195 apostila-de-scilab
 

Alocação Dinâmica em Linguagem C

  • 1. Alocação Dinâmica em Linguagem C LINGUAGEM C Alocação Dinâmica Glécio Rodrigues de Albuquerque glecioalbuquerque@gmail.com
  • 2. Alocação Dinâmica em Linguagem C Conteúdo • Alocação Estática • Alocação Dinâmica • Malloc • Sizeof • Free • Alocação de Vetores • Alocação de Matrizes • Calloc • Realloc • Exercício
  • 3. Alocação Dinâmica em Linguagem C Alocação Estática • Na execução de um programa geralmente precisamos armazenar dados temporariamente na memória. Para isso, lançamos mão das variáveis de memória. • As variáveis de memórias são declaradas através da determinação de um tipo de dado e seu identificador (nome), podendo ainda ser seguida de seu valor inicial (default).
  • 4. Alocação Dinâmica em Linguagem C Alocação Estática • No exemplo anterior, as variáveis são definidas utilizando alocação estática. • Em tempo de compilação já é conhecida a quantidade de memória que será necessária para a execução do programa. • Ao iniciar o programa, toda a memória necessária para a sua execução será alocada. • Acontece que, às vezes, a quantidade de memória a alocar só se torna conhecida durante a execução do programa. Para lidar com essa situação é preciso recorrer à alocação dinâmica de memória.
  • 5. Alocação Dinâmica em Linguagem C Alocação Dinâmica • A alocação dinâmica é o processo utilizado para se alocar memória em tempo de execução. • É utilizada quando não se sabe ao certo quanto de memória será necessário para o armazenamento dos dados, podendo ser determinado em tempo de execução conforme a necessidade do programa. • Outro ponto é a econômica de memória, já que é alocada apenas a quantidade de memória necessária para a operação. • A alocação dinâmica é muito utilizada em problemas de estruturas de dados, a exemplo de listas encadeadas e arvores, entre outros.
  • 6. Alocação Dinâmica em Linguagem C Alocação dinâmica • Para trabalharmos com alocação dinâmica em linguagem C, fazemos uso das seguintes funções: • malloc • calloc • realloc • free • Além dessas funções, fazemos uso do operador sizeof. • Também, na alocação dinâmica, o conceito de ponteiros é bastante utilizado.
  • 7. Alocação Dinâmica em Linguagem C • Ponteiro é um tipo de dado especial que armazena um endereço de memória. Possui um tipo e é precedido do simbolo “*”. • Exemplo de uso de um ponteiro e seu comportamento na memória: Ponteiros
  • 8. Alocação Dinâmica em Linguagem C Malloc • A função malloc aloca um bloco de bytes consecutivos na memória do computador e devolve o endereço do primeiro byte desse bloco. • O número de bytes é especificado como argumento da chamada da função. • A função malloc retorna um ponteiro de tipo genérico, void *, cabendo ao programador fazer um type casting para o tipo apropriado. • No seguinte fragmento de código, malloc aloca 01 byte:
  • 9. Alocação Dinâmica em Linguagem C Malloc • Neste outro código, a função malloc é utilizada para alocar espaço de memória para um valor inteiro e um valor double:
  • 10. Alocação Dinâmica em Linguagem C Malloc • No caso de alocarmos espaço de memória pra um registro (struct), precisamos saber a quantidade total de bytes necessários para armazenar a estrutura na memória. • Para facilitar esta tarefa, fazemos uso do operador sizeof.
  • 11. Alocação Dinâmica em Linguagem C Sizeof • O operador sizeof retorna um inteiro, informando o tamanho, em bytes, do tipo de dados passado como argumento:
  • 12. Alocação Dinâmica em Linguagem C Sizeof • Exemplos anteriores aplicando o operador sizeof:
  • 13. Alocação Dinâmica em Linguagem C NULL • Se a memória do computador já estiver toda ocupada, malloc não consegue alocar mais espaço e devolve NULL. • Convém verificar essa possibilidade antes de prosseguir:
  • 14. Alocação Dinâmica em Linguagem C Free • As variáveis alocadas estaticamente dentro de um escopo de código são desalocadas automaticamente quando a execução do escopo termina. • Já as variáveis alocadas dinâmicamente continuam a existir mesmo depois que a execução do escopo termina. • Para liberarmos a memória ocupada por essas variáveis, é preciso recorrer à função free. • A função free recebe como parâmetro um ponteiro para o endereço inicial da memória que será desalocada.
  • 15. Alocação Dinâmica em Linguagem C Free • A função free libera a porção de memória alocada por malloc. O comando avisa ao sistema que o bloco de bytes apontado por idade está livre. A próxima chamada de malloc poderá tomar posse desses bytes.
  • 16. Alocação Dinâmica em Linguagem C Alocando Vetores • Como já vimos, é possível alocar, além de variáveis simples, estruturas mais complexas, a exemplo de registros. • É possível também trabalharmos dinâmicamente com outros tipos de estruturas, como por exemplo os vetores. • De acordo com a norma ANSI, o trecho de código a seguir não é a forma correta de se declarar um vetor, a menos que n seja uma constante, definida por const ou #define.
  • 17. Alocação Dinâmica em Linguagem C Alocando Vetores • O exemplo a seguir mostra como podemos alocar e desalocar um vetor com n elementos inteiros durante a execução de um programa:
  • 18. Alocação Dinâmica em Linguagem C Alocando Matrizes • Outra exemplo de estruturas onde podemos utilizar alocação dinâmica são as matrizes. • Matrizes bidimensionais são implementadas como vetores de vetores. • Uma matriz com n linhas e m colunas é um vetor onde cada elemento de n é um vetor de m elementos. • Isto significa que temos um vetor de n posições de poteiros, onde cada posição de n vai apontar para um vetor de m posições do tipo de dado da matriz.
  • 19. Alocação Dinâmica em Linguagem C Alocando Matrizes • Exemplo da alocação dinâmica de uma matriz n x m:
  • 20. Alocação Dinâmica em Linguagem C Desalocando Matrizes • Exemplo de desalocação da matriz n x m alocada anteriormente:
  • 21. Alocação Dinâmica em Linguagem C Calloc • Assim como malloc, calloc tem a função de alocar espaços na memória. Sua principal diferença é que a mesma inicializa com zeros os bits das posições de memórias alocadas. • Outro ponto é que o uso de calloc facilita a alocação de estruturas como vetores e matrizes. • Está definida da seguinte forma: • A função calloc recebe como parâmetros dois inteiros sem sinal. O primeiro indica a quantidade de dados que se pretende alocar e o segundo, o tamanho, em bytes, de cada dado que será alocado.
  • 22. Alocação Dinâmica em Linguagem C Calloc • No trecho de código a seguir é alocado um vetor de inteiros com 5 posições através da função calloc: • É importante observar que, da mesma forma como acontece com malloc, caso a alocação não seja efetivada, ao invés de retornar um ponteiro a função irá retornar o valor NULL.
  • 23. Alocação Dinâmica em Linguagem C Realloc • A função realloc permite alocar ou realocar um espaço de memória. • Pode ser utilizada em casos onde se deseja aumentar ou diminuir o espaço de memória previamente alocado. • Está definida da seguinte forma: • A função recebe um ponteiro para o qual se deseja alocar ou realocar e a quantidade de memória, em bytes, necessária para a operação. • Assim como malloc e calloc, realloc retorna um ponteiro para o primeiro byte da memória alocada ou o valor NULL.
  • 24. Alocação Dinâmica em Linguagem C Realloc • Exemplo de uso da função realloc:
  • 25. Alocação Dinâmica em Linguagem C Realloc • Alocando e desalocando com realloc:
  • 26. Alocação Dinâmica em Linguagem C Praticando 1. Escreva um programa que leia um número inteiro positivo n, indicando a quantidade de inteiros que serão lidos, e imprima-os em ordem invertida. Por exemplo, ao receber 5, 222, 333, 444, 555 e 666 seu programa deve imprimir 666, 555, 444, 333, 222 e 5
  • 27. Alocação Dinâmica em Linguagem C Códigos e exercícios https://drive.google.com/folderview? id=0BxsDe2LkW3V2cExTTTE3YWhmLTg&usp=sharing
  • 28. Alocação Dinâmica em Linguagem C Referências CPLUSPLUS. C Standard General Utilities Library. Disponível em: http://www.cplusplus.com/reference/cstdlib/. Acessado em: 10/07/2015. LINGUAGEMCDESCOMPLICADA. Linguagem C. Disponível em: https://programacaodescomplicada.wordpress.com/indice/lingua gem-c/. Acessado em: 10/07/2015. MEDINA, Marco. FERTIG, Cristina. Algoritmos e Programação: Teoria e prática. São Paulo: Novatec, 2006. SCHILDT, Herbert. C Completo e Total. 3.ed. Makron Books do Brasil Editora, São Paulo, 1996.
  • 29. Alocação Dinâmica em Linguagem C Obrigado!!!

Notas do Editor

  1. - Abreviação de memory allocation
  2. Porque eh operador e nao funcao? Sua aplicação juntamente com o uso da função malloc garante a portabilidade do código e facilita o processo de alocação.
  3. Na segunda chamada o valor de vetor sera NULL