Ir para conteúdo
Fórum Script Brasil
  • 0

implementar alocaçao de memoria


Jackeline

Pergunta

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

}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...