这是一个段故障11怎么样?只有5x200个入口阵列

时间:2013-06-03 19:20:54

标签: c macos segmentation-fault

我正在使用Mac OSX,并在终端中使用bash。这台机器有8GB的RAM。我不知道为什么我的代码会出现段故障11。从我三周的经验来看,我通常会因为要求太多内存而得到它们。但我只要求5,200个入口阵列。这与打开和阅读文本文件有关吗?

什么可以使程序运行,原样? malloc与此相关吗?感谢您提供的任何帮助。

#include <stdio.h>
#include <math.h>

int main(){
double Mj[200]={0};
double Ma[200]={0};
double Cj[200]={0};
double Ca[200]={0};
double index[200]={0};

FILE *Matlab;
Matlab = fopen("TestbedComp.txt","r");
FILE *Cprog;
Cprog = fopen("results.txt","r");

int j = 0;
while( fscanf(Matlab,"%lf, %lf, %lf", &index[j], &Mj[j], &Ma[j]) == 3 ){
    printf("%lf, %lf, %lf\n", index[j], Mj[j], Ma[j]);
    j++;
}

fclose(Matlab);
printf("\n");

j = 0;
while( fscanf(Cprog,"%lf, %lf, %lf", &index[j], &Cj[j], &Ca[j]) == 3 ){
    printf("%lf, %lf, %lf\n", index[j], Cj[j], Ca[j]);
    j++;
}

fclose(Cprog);

double pej[200]={0};
for (j=0; j<200; j++) {
    pej[j] = fabs(Mj[j]-Cj[j])/Mj[j];
}

double pea[200]={0};
for (j=0; j<200; j++) {
    pea[j] = fabs(Ma[j]-Ca[j])/Ma[j];
}

FILE *out;
out = fopen("PercentError.txt","w");

for (j=0; j<200; j++) {
    fprintf(out,"%.15lf, %.15lf, %.15lf \n", index[j], pej[j], pea[j]);
}

fclose(out);

return 0;
}

2 个答案:

答案 0 :(得分:1)

fscanf读到行尾。如果代码中没有行,它将尝试完全读取它,并且您可能会遇到分段错误。

您能提供您尝试阅读的文件示例吗?

答案 1 :(得分:1)

我打赌你真的在功能序言中崩溃了... 1000双打正在从你的筹码中取出16000字节。尝试calloc那些而不是使用堆栈分配。