我正在尝试读取大数据文件,并将数据作为9维数组 B[37][24][5][5][8][19][6][19][14]
传递。稍后我将在代码中使用此数组。但是我得到了Segmentation fault error
。
我还尝试将B定义为指针,而不是数组,并使用命令“ B = (double *)malloc(5385542400 * sizeof(double));
”。但这没有帮助。
这是我将B定义为数组的代码。
#include <stdio.h>
#include <stdlib.h>
#include <gsl/gsl_rng.h>
#include <gsl/gsl_randist.h>
#include <math.h>
#include <string.h>
/* If filename given, write to file; for empty filename write to
screen */
char MYFILE[]="chisq_NHtest_NOvA_nu_app_non-uni_alpha_phi10_10sys.dat";
int main()
{
FILE *outfile = NULL;
outfile = fopen(MYFILE, "w");
if (outfile == NULL)
{
printf("Error opening output file.\n");
return -1;
}
char MYFILE1[]="nova_app_nu_data.dat";
FILE *file1 = NULL;
file1 = fopen(MYFILE1, "r");
if (file1 == NULL)
{
printf("Error reading input file1.\n");
return -1;
}
int i;
static double A[6];
double ret1;
for (i=0; i<6; i++)
{
ret1= fscanf(file1,"%lf ",&A[i]);
if (ret1 == EOF)
{
break;
}
}
char MYFILE2[]="events_vs_E+test_NH_NOvA_nu_app_non-uni_phi10_alpha00_alpha10_alpha11.dat";
FILE *file2 = NULL;
file2 = fopen(MYFILE2, "r");
if (file2 == NULL)
{
printf("Error reading input file2.\n");
return -1;
}
int k,l,m,n,o,p,q,r,s;
double C;
static double B[37][24][5][5][8][19][6][19][14];
double ret2;
for (k=0; k<37; k++)
{
for (l=0; l<24; l++)
{
for (m=0;m<5;m++)
{
for (n=0;n<5;n++)
{
for (p=0; p<8; p++)
{
for (q=0; q<19; q++)
{
for (r=0; r<6; r++)
{
for (s=0; s<19; s++)
{
for (o=0;o<14;o++)
{
fscanf(file2,"%lf ",&ret2);
B[k][l][m][n][p][q][r][s][o]=ret2;
if (ret2 == EOF)
{
break;
}
}
}
}
}
}
}
}
}
}
exit(0);
}
如果我将s循环的结束值从19更改为5,则代码运行正常。
答案 0 :(得分:-1)
您编写的break语句将仅退出最里面的for循环。
要退出其他循环,您需要编写条件来检查是否已触发中断。但是,由于您有9个嵌套的for循环,因此最好使用goto语句。
double ret2;
int ret3;
for (k=0; k<37; k++)
{
for (l=0; l<24; l++)
{
for (m=0;m<5;m++)
{
for (n=0;n<5;n++)
{
for (p=0; p<8; p++)
{
for (q=0; q<19; q++)
{
for (r=0; r<6; r++)
{
for (s=0; s<19; s++)
{
for (o=0;o<14;o++)
{
ret3 = fscanf(file2,"%lf ",&ret2);
B[k][l][m][n][p][q][r][s][o]=ret2;
if (ret3 != 1)
{
goto endloop;
}
}
}
}
}
}
}
}
}
}
:endloop
exit(0);
您还应该考虑为什么需要9维数组并尝试简化它。