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); }