Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou com dificuldades em alocar a memória dentro de uma função, seguem os dados:
/*********************************************************************************
Sistema Estudo de Caso Biblioteca
Programa ler
Função: Modulo para ler informacoes do arquivo
Desenvolvedor - Kauan Mocelin
Data Desenvolvimento:
Obsevação:
**********************************************************************************/
void ler(materialLivro** livro, int* num)
{
char linhaArquivo[sizeof(materialLivro)];
char* parsing;
char matriz[10][60]; //matriz[0] = cod, matriz[1] = nome, matriz[2] = qtdExemplares
int cont = 0;
//Abre arquivo para leitura
FILE* arquivo;
arquivo = fopen("arquivo.txt","r");
if(arquivo == NULL)
{
printf("ERRO AO ABRIR ARQUIVO OU ARQUIVO VAZIO\n\n");
return;
}
//Realiza leitura do arquivo, linha por linha, faz o parsing e salva em um array
while(!(feof(arquivo)))
{
fgets(linhaArquivo,(sizeof(materialLivro)),arquivo);
parsing = strtok(linhaArquivo,";");
while(parsing != NULL)
{
strcpy(matriz[cont],parsing);
parsing = strtok(NULL,";");
cont++;
}
(*num)++;
}
(*num)--; //Desconsiderar a última linha, a qual esta em branco
//Aloca a memoria necessaria para armazenar os dados do arquivo
*livro = (materialLivro *) malloc((sizeof(materialLivro)) * (*num));
if(*livro == NULL)
{
printf("\nNAO FOI POSSIVEL ALOCAR MEMORIA");
exit(EXIT_FAILURE);
}
//copia o conteudo do array para a estrutura de dados
for(cont=0;cont<(*num);cont++)
{
strcpy(&(*livro)[cont].cod,matriz[cont*3]);
strcpy(&(*livro)[cont].nome,matriz[cont*3+1]);
strcpy(&(*livro)[cont].qtdExemplares,matriz[cont*3+2]);
}
//free(*livro);
fclose(arquivo);
}
Estou entrando com os seguintes parâmetros nesta função:
materialLivro* livro = NULL;
int num=0;
//chama o módulo de leitura do arquivo
ler(&livro,&num);
Quando executo a função está retornando falha de segmentação, ou seja, problemas com a memória =//
Carregando comentários...