1

私は Mac OSX で作業しており、ターミナルで bash を使用しています。マシンには 8GB の RAM が搭載されています。このコードでセグメント違反 11 が発生する理由がわかりません。私の3週間の経験から、私は通常、要求されたメモリが多すぎるという形でそれらを取得します. しかし、私が求めているのは 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;
}
4

2 に答える 2

1

fscanf行の終わりまで読み取ります。コードに行がない場合、コードを完全に読み取ろうとするため、セグメンテーション違反が発生する可能性があります。

読み込もうとしているファイルの例を教えてください。

于 2013-06-03T19:24:49.930 に答える