Arquivos com muitas linhas: Falha de segmentação (imagem do núcleo gravada)

1. Arquivos com muitas linhas: Falha de segmentação (imagem do núcleo gravada)

Ed-ek Soares Silva
edek

(usa Fedora)

Enviado em 27/01/2016 - 17:51h

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, e atualmente estou usando o fedora 23, em todos usei o compilador GCC. Primeiramente, eu uso um grande número de programas para cálculo numérico, 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 compilador GCC (versão atual 5.3.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.170k0.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++){
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");

Esse problema já havia ocorrido antes, quando mudei do fedora 20 para o 22, passei semanas instalando dezenas de bibliotecas relacionadas ao compilador gcc até que o problema foi resolvido, mas não tive como saber se foi algo que eu fiz ou foi um upgrade completo que eu havia dado na máquina no mesmo dia.

Agora que migrei para o fedora 23 o problema voltou e não consegui identificar o problema.



  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts