我在下面的代码中有一个分段错误,但不明白为什么。这是一个更大程序的一部分,其中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

10-04 12:32