Buscar

Unidade_03_5_Linguagem_C_Aloc_Din_Mem_Sergio_Diniz

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

IESB
IESB
APC
Introdução à Linguagem C
(continuação)
IESB
APC 
Linguagem C – Alocação Dinâmica de Memória
As declarações abaixo alocam memória para diversas variáveis. A alocação é estática, pois acontece antes que o programa comece a ser executado: 
 char c; int i; int v[10]; 
À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. A alocação dinâmica é gerenciada pelas funções malloc, realloc, calloc e free, que estão na biblioteca stdlib.h
Função malloc
A função malloc (abreviatura de memory allocation) aloca um bloco de bytes consecutivos na memória do computador e devolve o endereço desse bloco. 
IESB
APC 
Linguagem C – Alocação Dinâmica de Memória
O número de bytes é especificado no argumento da função. No seguinte fragmento de código, malloc aloca 1 byte:
char *ptr; 
ptr = (char *)malloc (1); 
scanf ("%c", ptr); 
O endereço devolvido por malloc é do tipo "genérico" void . O programador armazena esse endereço num ponteiro de tipo apropriado convertendo através do “cast” (char *). 
IESB
APC 
Linguagem C – Alocação Dinâmica de Memória
No exemplo acima, o endereço é armazenado num ponteiro-para-char. 
Para alocar um tipo-de-dado que ocupa vários bytes, é preciso recorrer ao operador sizeof, que diz quantos bytes o tipo especificado tem:
 
Ponteiro=(<tipo do ponteiro>*)
malloc(valorParaAlocação*sizeof(<tipo do ponteiro>))
string= (char *)malloc( tamanho * sizeof(char) ); /*o sizeof ajuda a aumentar a portabilidade. (char *) converte de void para string */ 
IESB
APC 
Linguagem C – Alocação Dinâmica de Memória
include <stdio.h> 
int main() 
{ 
unsigned short int tamanho; 
char *string; /*ponteiro para char, é necessário que seja uma ponteiro para ser alocado*/ 
printf("\nDigite o tamanho da string: "); scanf("%d",&tamanho); 
string= (char *)malloc( tamanho * sizeof(char) ); /*o sizeof ajuda a aumentar a portabilidade*/ 
printf("\nDigite a string: "); 
scanf("%s",string); //sem o & antes de string pois já é endereço
printf("\n%s",string); 
free(string); /*libera a memória alocada*/
return 0;
 } 
IESB
APC 
Linguagem C – Alocação Dinâmica de Memória
Função calloc
	Esta função também tem como objetivo alocar memória e possui a seguinte sintaxe:
 	calloc(<quant de elementos>, <tamanho de cada elemento>)
	Tanto “quant de elementos” como “tamanho de cada elemento” são “unsigned int”.
	A função inicializa o espaço alocado com 0(zero)
IESB
APC 
Linguagem C – Alocação Dinâmica de Memória
include <stdio.h> 
int main() 
{ unsigned short int tamanho; 
char *string; /*ponteiro para char, é necessário que seja uma ponteiro para ser alocado*/ 
printf("\nDigite o tamanho da string: "); scanf("%d",&tamanho); 
string= (char *)calloc( tamanho, sizeof(char) ); /*o sizeof ajuda a aumentar a portabilidade*/ 
printf("\nDigite a string: "); 
scanf("%s",string); );//sem o & antes de string pois já é endereço
printf("\n%s",string); 
free(string); /*libera a memória alocada*/
return 0;
 } 
IESB
APC 
Linguagem C – Alocação Dinâmica de Memória
Função realloc
	Esta função permitir alterar o tamanho de um espaço de memória já alocado (realocar) e possui a seguinte sintaxe:
 realloc(<variável a ser realocada>,<novo tamanho >)
Exemplo:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
 int ent,n, cont=0, * numeros = NULL, * mais_numeros;
  do {
 printf ("Entre um valor inteiro (0 para encerrar): ");
 scanf ("%d", &ent);
 count++; 
IESB
APC 
Linguagem C – Alocação Dinâmica de Memória
mais_numeros = (int*) realloc (numeros, cont * sizeof(int)); /* realloc porque já havia sido alocado NULL para numeros */
  if (mais_numeros != NULL) {
 numeros=mais_numeros;
 numeros[cont-1]=ent;
 }
 else {
 free (numeros);
 puts ("Erro ao (re)alocar memoria");
 exit (1);
 }
 } while (ent!=0);
  printf ("Numeros entrados: ");
 for (n=0;n<cont;n++) printf ("%d ",numeros[n]);
 free (numeros);
  return 0;
}
*
O objetivo desse seminário é apresentar AspectJ: uma ferramenta que possibilita o desenvolvimento de aplicações com base num novo paradigma de programação conhecido como Programação Orientada a Aspectos.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando