我在以下代码中有一个分段错误,但不明白为什么。这是一个更大程序的一部分,其中 fsi 是一个双精度值,并且在此代码块之前立即计算。该程序计算几年 (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
for(i=1;i<=lt;i++)
silicate[i] = fsi;
是错误的,C 中的索引从零开始。因此,您的有效索引0 .. (lt-1)