Boa noite! Estou com essa questão no trabalho e não estou conseguindo relaizar a alocaçao de memoria corretamente para o arquivo, fico agradecida se alguém puder dar uma ajudazinha. já tentei de varias maneiras mas sempre da erro, já pesquisei também mas não achei soluçao ainda. void leArquivo(void) { //Variáveis locais FILE* prArquivo = NULL; char sTempNome[50]; char sLinha[100]; int iDia = 0; int iFuncionario = 0; int iContador = 0; //Realiza abertura do arquivo prArquivo = fopen("ArquivoPonto.txt","r"); //Verifica se o arquivo foi aberto com sucesso if (!prArquivo) { printf("Erro ao tentar abrir o arquivo ponto!"); exit(1); } //Le a primeira linha do arquivo e quebra os tokens (mes e ano) fgets(sLinha,100,prArquivo); strcpy(sMes,strtok(sLinha,";")); iAno = atoi(strtok(NULL,";")); //Le a segunda e terceira linha do arquivo linha do arquivo (quantidade de dias do mês que foram trabalhados na empresa e a quantidade de funcionários da empresa) fgets(sLinha,100,prArquivo); iTotalDiasTrabalhados = atoi(sLinha); fgets(sLinha,100,prArquivo); iQtdFuncionarios = atoi(sLinha); //Aloca a memória para a estrutura alocaMemoria(); //Verifica se a memória foi alocada if (!prDadosPonto) { printf("Memoria não alocada!"); exit(0); } //Inicializa a estrutura inicializa(); //Realiza a leitura das linhas restantes do arquivo que representam o total de dias trabalhados na empresa * total de funcionarios for(iContador = 0; iContador< (iTotalDiasTrabalhados * iQtdFuncionarios); iContador++) { //Le a linha do arquivo e quebra os tokens fgets(sLinha,100,prArquivo); //Quebra os tokens da linha strcpy(sTempNome,strtok(sLinha,";")); //Verifica a posicao de onde o registro será inserido iFuncionario = insereRegistro(sTempNome); //Verifica se do funcionário já foi cadastrado no vetor if (strcmp(prDadosPonto[iFuncionario].sNome,"")==0) { strcpy(prDadosPonto[iFuncionario].sNome,sTempNome); } //Realiza a leitura do dia e valores de ponto para manhã e tarde iDia = atoi(strtok(NULL,";")); prDadosPonto[iFuncionario].vPontoDia[iDia-1].iManha= atoi(strtok(NULL,";")); prDadosPonto[iFuncionario].vPontoDia[iDia-1].iTarde= atoi(strtok(NULL,";")); } //Fecha o arquivo fclose(prArquivo); } /*********************************************************** *Nome: alocaMemoria() *Descrição: função utilizada para alocar memória para armazenar os registros de ponto dos funcionários *Parametros: void *Retorno: void ************************************************************/ void alocaMemoria(void) { // IMPLEMENTE AQUI } /*********************************************************** *Nome: inicializa() *Descrição: inicializa a estrutura de armazenamento dos registros de ponto dos funcionários *Parametros: void *Retorno: void ************************************************************/ void inicializa(void) { //Variáveis locais int iFuncionario=0, iDia=0; for (iFuncionario=0; iFuncionario < iQtdFuncionarios; iFuncionario++) { strcpy(prDadosPonto[iFuncionario].sNome,""); for (iDia = 0; iDia < iTotalDiasTrabalhados; iDia++) { prDadosPonto[iFuncionario].vPontoDia[iDia].iManha = 0; prDadosPonto[iFuncionario].vPontoDia[iDia].iTarde = 0; } } } /*********************************************************** *Nome: desalocaMemoria() *Descrição: função utilizada para liberar a memória alocada *Parametros: void *Retorno: void ************************************************************/ void desalocaMemoria(void) { //Variáveis locais int iFuncionario = 0; //Libera o vetor de dias para cada funcionario for (iFuncionario=0; iFuncionario < iQtdFuncionarios; iFuncionario++) { free(prDadosPonto[iFuncionario].vPontoDia); } //Libera o vetor de pontos free(prDadosPonto); }