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

Programa em C: Falha de segmentação (imagem do núcleo gravada)


Ed-ek Soares Silva

Pergunta

Olá a todos do fórum, estou com um problema em alguns programas em C. Usava o fedora 20, depois passei a usar o ubuntu 14.10, em ambos usei o compilador GCC e o problema persiste.  Trabalho com grandes quantidades de dados, arquivos de dados com 100 mil linhas ou mais, que são tabelas com números. Então, para estudar estes dados uso programação em C para ler os arquivos, efetuar alguma operação, e em seguida escrever uma saída. O problema é que recentemente, acredito que depois de alguma atualização do meu compilador GCC (versão atual 4.9.1), alguns programas começaram a apresentar na execução "Falha de segmentação (imagem do núcleo gravada)", quando eu lido com esses arquivos de grande número de linhas.

Eis um exemplo:

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define n 378434
int main() {
FILE *file1;
FILE *file2;
file1 = fopen("kepler_cut.dat", "r");
file2 = fopen("kepler.170k.dat", "w");
float Kp[n], Gc[n], logAge[n], MH[n], m_ini[n], logL[n], logT[n], logg[n], m_M0[n], Av[n], m2m1[n], mbol[n], U[n], B[n], V[n], R[n], I[n], J[n], H[n], K[n], Mact[n];
long int i, rnd;
rnd=0;
srand( (unsigned)time(NULL) );
for (i=0; i < n; i++){
  if(fscanf(file1, " %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f\n", &Kp[i], &Gc[i], &logAge[i], &MH[i], &m_ini[i], &logL[i], &logT[i], &logg[i], &m_M0[i], &Av[i], &m2m1[i], &mbol[i], &U[i], &B[i], &V[i], &R[i], &I[i], &J[i], &H[i], &K[i], &Mact[i])){};
}
for (i=0; i < 168842; i++){
  rnd = rand() % n -1;
  
  fprintf(file2, " %.3f\t%.0f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\n", Kp[rnd], Gc[rnd], logAge[rnd], MH[rnd], m_ini[rnd], logL[rnd], logT[rnd], logg[rnd], m_M0[rnd], Av[rnd], m2m1[rnd], mbol[rnd], U[rnd], B[rnd], V[rnd], R[rnd], I[rnd], J[rnd], H[rnd], K[rnd], Mact[rnd]);
}
fclose(file1);
fclose(file2);
return(0);
}

Este programa lê um arquivo de 378434 linhas, criando um vetor para cada coluna, escolhe aleatoriamente 168842 e escreve no arquivo de saída. Usando o gdb ele me diz que a falha ocorre na linha que faz a abertura do arquivo:

file1 = fopen("kepler_cut.dat", "r");

 

Não consegui identificar o problema.

Editado por Ed-ek Soares Silva
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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...