E ae Pessoal Conectado na Imp Games, estou aqui novamente trazendo um conteúdo novo " Alocação Dinâmica de Memória ". Nesse tuto algumas Funções ainda não foram vistas, explicarei o funcionamento de cada uma e para que servem.
Alocação Dinâmica: A alocação dinâmica permite ao programador criar variáveis em tempo de execução, ou seja, alocar memória para novas variáveis quando o programa está sendo executado, proporcionando uma melhor utilização da memória da máquina, pois quando criada em tempo de execução não é necessária a utilização de memória adicional.
Código:
#include <stdio.h>
#include <stdlib.h>
int main (void)
{ // Iniciando Bloco ou Programa
system("cls"); // Comando usado para apagar a Tela
int *p; // Declarando Variavel que servirá como Ponteiro
int i, k, n; // Declarando Demais Variavéis
printf("\n Digite a quantidade de numeros que serao digitados : "); // Imprimindo instruções para quantidade de posições
scanf("%d", &i);
p = (int *)(malloc (i * sizeof(int))); // Atribuindo à "p" o tamanho de sua alocação que será valor contido em "i"
if (p == NULL) // Prevenção de Erro na Alocação: Caso não haja espaço na memoria o valor continuará 0
{
printf("\nErro de alocacao de memoria"); // Imprimindo mensagem de erro
exit(1); // Fechando o Programa
}
for(k = 0; k < i; k++) // Percorrendo os elementos do Vetor
{
printf("Informe o numero para o indice %d : ",k); // Imprimindo intruções para atribuição de valor aos elementos
scanf("%d",&p[k]);
}
for(k = 0; k < i; k++) // Percorrendo os elementos do Vetor
{
printf("O numero para o indice %d, %d\n",k,p[k]); // Imprimindo os valores atribuidos à cada elemento
}
printf("\n Digite quantos elementos quer adicionar ao vetor : "); // Imprimindo instruções para quantidade de posições à serem acrescentadas na realocação
scanf("%d",&n);
p = (int *)(realloc(p, (i + n )* sizeof(int))); // Atribuindo à "p" o novo tamanho de sua alocação que será valor contido em "i" Tamanho Original + "n" Quantidade à ser acrescentada
if (p == NULL) // Prevenção de Erro na Alocação: Caso não haja espaço na memoria o valor continuará 0
{
printf("\nErro de alocacao de momoria"); // Imprimindo mensagem de erro
exit(1); // Fechando o Programa
}
for(k = 0; k < i+n; k++) // Percorrendo os elementos do Vetor Realocado
{
printf("Digite o numero para o indice %d: ",k); // Imprimindo intruções para atribuição de valor aos elementos
scanf("%d",&p[k]);
}
for(k = 0; k < i+n; k++) // Percorrendo os elementos do Vetor Realocado
{
printf("O numero para o indice %d, %d\n",k,p[k]); // Imprimindo os valores atribuidos à cada elemento
}
free(p); // Liberando espaço de memoria utilizado pelo elemento "p"
printf("\n"); // Acrescentando um espaço para organização do programa
system("pause"); // Dando pause no programa para que mostre os resultados do programa até o usuario pressionar alguma tecla
} // Fechando Bloco ou Programa
Breve Explicação:
A função malloc() serve para alocar memória, ou seja, reserva um numero especifico de memoria, dependendo do tipo do ponteiro que chama a função.
A função realloc() é utilizada para realocar memória.
Quando alocamos memória dinamicamente é recomendado que ao término da execução do programa essa memória seja liberada. Para isto existe a função free().
Informação
| Créditos pelo Tutorial : Sup_Anjo e João Neto | |