我在c中有一个分段错误

时间:2014-02-11 21:30:40

标签: c segmentation-fault

我在以下代码中遇到了分段错误,但不明白原因。这是较大程序的一部分,其中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); 

2 个答案:

答案 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)