Ir para o conteúdo
Hellyo

Segmentation fault em estrutura

Mensagens Recomendadas

Hellyo

Tenho o código abaixo para ler um ficheiro com conteudo do tipo :

FeI,iron monoiodide
FeI2,iron diiodide
,iron(II) iodide
FeI2 á 4H2O,iron(II) iodide tetrahydrate
FeI3,iron(III) iodide
FeMoO4,iron(II) orthomolybdate
FeO,iron monoxide
,iron(II) oxide
,wŸstite
FeO2,iron dioxide
FeO2H,goethite

São cerca de 1900 linhas deste genero para colocar em estruturas, mas o problema e que lê 1399 sem problemas e depois dá segmentation fault, não vejo é porque, alguem ajuda??

composto* readFilecomposto(composto *{
  composto *mv;
  char c[100];
  char* formula=NULL,*tok=NULL;
  FILE *f=fopen("CompostosQuimicos.csv", "r");
  while (!feof(f)){
    fgets(c, 100, f);
   
      mv=makenodecomposto();
      formula=(char*)realloc(formula, (strlen(c))*sizeof(char));  

   tok =strtok(c, "," );
     
      mv->fquimica=(char*)realloc(mv->fquimica, (strlen(c))*sizeof(char));
      strcpy(mv->fquimica, tok);
      tok =strtok(NULL, "\r" );
      mv->designacao=(char*)realloc(mv->designacao, (strlen(c))*sizeof(char));
  if (tok == NULL)
  {            
                strcpy(mv->designacao, mv->fquimica);
                strcpy(mv->fquimica, formula);
              
   }             
            
  else
          { 
                strcpy(mv->designacao, tok);
                strcpy(formula, mv->fquimica);
                }
  printf("Formula quimica: %s\n",mv->fquimica);
   printf("Designacao: %s\n\n",mv->designacao);
                
      b=insertlastcomposto(b, mv);  

  
     }    
  
  free(mv);
  free(formula);
  fclose(f);
  return(b);
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Verifica se os realloc devolvem NULL.

Qual é a definição do tipo "composto"?

A linha 1399 (ou por aí) do ficheiro é parecida com as outras? Isto é ... não será a única linha com mais de 100 caracteres do ficheiro?

O teu uso de feof para controlar o ciclo esta errado ... mas pronto, não é por causa disto que o programa crasha.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Hellyo

Tipo composto:

typedef struct composto{
  char *fquimica;
  char *designacao;
  struct composto* nseg;
}composto;

A linha é semelhante as outras, não chega a 100 caracteres

---

Edit (Baderous): GeSHi adicionado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

uma alocação de "(strlen©)*sizeof(char)" bytes não é suficiente para guardar uma string com comprimento c. Precisas de mais um byte para o '\0'.

Verifica se os realloc devolvem NULL!

Certifica-te que estás a inicializar os ponteiros dos objectos do tipo "composto", com NULL ou um malloc razoável.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.