このコードを機能させようとしていますが、すぐにセグメンテーション違反が発生し、その理由がわかりません。Fstream はファイルを開くことができますが、これら 3 つの while ループが問題を引き起こしています。コメントしても、プログラムは segfault をスローしません。もちろん、配列の容量はファイルよりも大きくなります。cout << inputf を使用すると 0x7fff617291a0 のような表示になりますが、ファイルは問題ないようで、少し当惑しています。
#include <iostream>
#include <fstream>
#include <cmath>
#include <string>
using namespace std;
int main(){
string plikf = "BH_diagnostics.ah1.pg";
string pliks = "BH_diagnostics.ah2.pg";
string plikt = "BH_diagnostics.ah3.pg";
ifstream inputf("BH1"); ifstream inputs("BH2"); ifstream inputt("BH3");
ofstream output("script.p");;
output << "plot " << '"' << plikf << '"' << "using 1:2, " << '"' << pliks << '"' << "using 1:2, " << '"' << plikt << '"' << "using 1:2 w l \n";
double trash;
if(!inputf) cout << "panick 1 ";
if(!inputs) cout << "panick 2 ";
if(!inputt) cout << "panick 3" ;
double bhf[3000][5];
double bhs[3000][5];
double bht[3000][5];
int i,j,k;
// PROBLEM HERE
while (inputf >> trash >> bhf[i][0] >> bhf[i][1] >> bhf[i][2] >> bhf[i][3] >> trash >> trash >> bhf[i][4] >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash){i++;cout << bhf[i][0];}
while (inputs >> trash >> bhs[j][0] >> bhs[j][1] >> bhs[j][2] >> bhs[j][3] >> trash >> trash >> bhs[j][4] >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash){ j++; cout << bhs[j][0];}
while ( inputt >> trash >> bht[k][0] >> bht[k][1] >> bht[k][2] >> bht[k][3] >> trash >> trash >> bht[k][4] >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash >> trash ){ k++; cout << bht[k][0];}
int l,n;
double dt = bht[k][0]/20;
for (int s=0; s<i; s++) {
if (bhf[s][0] > l) { output << "\n set object " << n << " circle at axis " << bhf[s][1] << ',' << bhf[s][2] << " size first " << bhf[s][4] << " fc rgb " << '"' << "navy" << '"' << "\n"; l+=dt; n++;}
}
l=bhs[1][0];
for (int s=0; s<j; s++) {
if (bhs[s][0] > l) { output << "\n set object " << n << " circle at axis " << bhs[s][1] << ',' << bhs[s][2] << " size first " << bhs[s][4] << " fc rgb " << '"' << "navy" << '"' << "\n"; l+=dt; n++;}
}
l=bht[1][0];
for (int s=0; s<k; s++) {
if (bht[s][0] > l) { output << "\n set object " << n << " circle at axis " << bht[s][1] << ',' << bht[s][2] << " size first " << bht[s][4] << " fc rgb " << '"' << "navy" << '"' << "\n"; l+=dt; n++;}
}
return 0;
}