Baixe o app para aproveitar ainda mais
Prévia do material em texto
PROGRAMAÇÃO II AULA 8 – ALOCAÇÃO DINÂMICA CIÊNCIA DA COMPUTAÇÃO CONVERSÃO DE TIPOS Se o destino e a origem são de tipos diferentes o compilador faz uma conversão de tipos; Nem todas as conversões são possíveis; O valor de origem é convertido para o valor de destino; Em uma conversão nunca ganhamos precisão, podemos perder precisão ou no máximo manter a precisão anterior. 2 CONVERSÃO DE TIPOS 3 ALOCAÇÃO DINÂMICA A alocação dinâmica permite ao programador alocar memória para variáveis quando o programa está sendo executado; Podemos definir por exemplo o tamanho de um vetor ou matriz cujo tamanho descobriremos em tempo de execução; Vamos estudar 4 funções para o sistema de alocação dinâmica, disponíveis na biblioteca stdlib.h; 4 ALOCAÇÃO DINÂMICA -MALLOC A função malloc() serve para alocar memória e tem o seguinte protótipo: A função toma o número de bytes que queremos alocar (num), aloca na memória e retorna um ponteiro void * para o primeiro byte alocado. Se não houver memória suficiente para alocar a memória requisitada a função malloc() retorna um ponteiro nulo. 5 ALOCAÇÃO DINÂMICA PROJETO 1 6 ALOCAÇÃO DINÂMICA -CALLOC A função calloc() também serve para alocar memória, mas possui um protótipo um pouco diferente; A função aloca uma quantidade de memória igual a num*size; Ou seja, aloca memória suficiente para um vetor de num objetos de tamanho size; 7 ALOCAÇÃO DINÂMICA -CALLOC 8 ALOCAÇÃO DINÂMICA -REALLOC A função realloc serve para realocar memória e tem o seguinte protótipo: A função modifica o tamanho da memória previamente alocada, apontada por *ptr para aquele especificado por num; O valor de num pode ser maior ou menor que o original; 9 ALOCAÇÃO DINÂMICA -REALLOC Se ptr for nulo, aloca size bytes e devolve um ponteiro; Se size é zero, a memória apontada por ptr é liberada; Um ponteiro para o bloco é devolvido porque o realloc() pode precisar mover o bloco para aumentar o tamanho; Se não houver memória suficiente para alocação um ponteiro nulo é devolvido; 10 PROJETO 2 -REALLOC 11 QUAL É O PROBLEMA DESSE CÓDIGO? ALOCAÇÃO DINÂMICA -FREE A função free() serve para liberarmos a memória alocada quando ela não for mais necessária. Segue o protótipo da função; Basta então passar para o free() o ponteiro que aponta para o início da memória alocada. Como o programa sabe quantos bytes vão ser liberados? “Tabela de alocação” 12 13 PASSAGEM DE MATRIZ COMO PARÂMETRO 14 ALOCAÇÃO DINÂMICA DE VETORES EXERCÍCIO 1 15 Crie as funções: float* liberarVetor(float *v); void redimensionarVetor(float *v, int tam); Juntamente com a função alocarVetor() abaixo, crie um programa que teste as funções do programa. ALOCAÇÃO DE MATRIZES A alocação dinâmica de memória para matrizes é realizada da mesma forma que para vetores; Com a diferença que teremos um ponteiro apontando para outro ponteiro que aponta para o valor final; Ponteiro de Ponteiro é um conceito denominado como indireção múltipla 16 ALOCAÇÃO DE MATRIZES PROJETO 3 17 ALOCAÇÃO DE MATRIZES PROJETO 4 18 EXERCÍCIO 2 Faça um programa em que o usuário informa o nº de elementos e um vetor de inteiros é alocado dinamicamente e preenchida aleatoriamente. Após imprimir os elementos da matriz em tela, o usuário poderá escolher uma posição para ser eliminada, a eliminação será realizada através de uma realocação de memória em que a coordenada escolhida será desconsiderada, sendo o vetor resultante o mesmo inicialmente utilizado. Ao final, a memória utilizada deverá ser liberada; 19 PONTO EXTRA Faça um programa em que o usuário informa o nº de linhas e colunas e uma matriz de inteiros é alocada dinamicamente e preenchida aleatoriamente. Após imprimir os elementos da matriz em tela, o usuário poderá escolher uma coluna ou uma linha para ser eliminada, para isso crie duas funções eliminaLinha e elimina coluna, em ambas a eliminação será realizada através de uma realocação de memória em que a coordenada escolhida será desconsiderada, sendo a matriz resultante a mesma matriz inicialmente utilizada. Ao final, a memória utilizada deverá ser liberada; 20 PONTO EXTRA 21
Compartilhar