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.