我在 c 中有一个分段错误



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

相关内容

  • 没有找到相关文章

最新更新