Baixe o app para aproveitar ainda mais
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.
Compartilhar