CARREGAR DADOS DE UM ARQUIVO EM UMA ÁREA ALOCADA DINAMICAMENTE

 

Supondo que seja necessário trazer de volta para a memória todos os registros dos clientes de uma academia salvos em um arquivo, você deverá seguir os seguintes passos:

 

- Criar uma função.

- Criar um ponteiro do mesmo tipo dos dados a serem lidos.

- Alocar no ponteiro, uma área de memória do tamanho de um registro.

- Ler um dado do arquivo para a área alocada.

- Realocar a área de forma que caiba mais um registro.

- Repetir a leitura até o final do arquivo.

 

Observe a seguinte função:

 
// Subprograma x           
//   Objetivo   : Trazer todos os registros de um
//	           arquivo para uma area alocada dinamicamente.
//   Parametros : Nenhum.
//   Retorno    : Endereço da alocação.
tipoFrequentador * alocacaoDinamica()
{
// Declarações:
  tipoFrequentador *frequen = NULL; // abreviacao de frequentador
  int contador=0; 
  FILE *arq;
// Instruções:
  frequen=(tipoFrequentador *)malloc(sizeof(tipoFrequentador)); // alocando memoria
  if (!(arq = fopen(ARQFREQUENT,"rb")))                       
     exit(1);
  while (fread(frequen + contador,sizeof(tipoFrequentador),1,arq))
  {
   contador++;
   // fazendo a realocacao de memoria
   frequen=(tipoFrequentador*)realloc(frequen,(contador+1)*sizeof(tipoFrequentador));
  }  
  return frequen;
}
 

Note que primeiramente é criado um ponteiro, então mais abaixo ele recebe a função “malloc”, alocando um espaço de um registro (sizeof(tipoFrequentador)), então ele entra em um comando de repetição até o final do arquivo, sempre que é lido um registro o contador aumenta e logo após, o ponteiro recebe um “realloc” para aumentar a capacidade de armazenamento do ponteiro em mais um registro. Por fim, a função retorna o endereço inicial dessa área alocada.