我在下面的代码中有一个分段错误,但不明白为什么。这是一个更大程序的一部分,其中fsi是一个double,在这个代码块之前立即计算。该程序计算多年(lt)的fsi,我想将输出打印为数组(fsi.dat)。它会打印第一个值,但随后会打印分段故障。我错过了什么?
代码如下:
FILE *fpout;
int lt;
double silicate[lt];
fpout = fopen("fsi.dat","w");
if(fpout == NULL)
ferrx("writedat(): Can't open file to write: fsi.dat");
for(i=1;i<=lt;i++)
silicate[i] = fsi;
fprintf(fpout,"%18.15f \n", silicate[i]);
fclose(fpout);
最佳答案
要在for
中执行多个语句,需要放括号
for(i=1;i<=lt;i++) {
silicate[i] = fsi;
fprintf(fpout,"%18.15f \n", silicate[i]);
}
你的版本相当于
for(i=1;i<=lt;i++) {
silicate[i] = fsi;
}
fprintf(fpout,"%18.15f \n", silicate[i]);
最后一行执行
i = lt + 1