我在以下代码中遇到了分段错误,但不明白原因。这是较大程序的一部分,其中fsi是double,并且紧接在此代码块之前计算。程序在几年内计算fsi(lt),我想将输出打印为数组(fsi.dat)。它打印第一个值,然后打印seg故障。我错过了什么?
以下是代码:
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);
答案 0 :(得分:2)
您需要放置括号以便在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
答案 1 :(得分:1)
for(i=1;i<=lt;i++)
silicate[i] = fsi;
错误,C中的索引从零开始。因此,您的有效索引为0 .. (lt-1)