0

このコードは、次の形式の 2 つの .dat ファイルを読み取る必要があります。

xy 強度 例:

1 1 70
1 2 0.3
1 3 5

1 つのファイルを読み取って正しい情報を表示し、他のファイルでも同じ情報を表示しますが、2 つのファイルを読み取ろうとすると、正しくコンパイルされているにもかかわらず「セグメンテーション違反」が発生します。一度に1つのファイルを実行するとうまくいくので、その理由は100%わかりません。ファイルを読み込む方法が気に入らないかもしれません。これが機能するようになったら、ベクターに移行しますが、それらについてはまだ学習中であり、最初に配列を釘付けにしたいと考えています。

int main()
{

  std::ifstream file1("p001_1.dat");

  std::ifstream file1_2("p001_2.dat");

    double intensity;
    int i;
    int j;
    double pic1[1392][1040]; //number of pixels
    double pic1_2[1392][1040];

    // reads in file creating an array [x][y] = intensity

    cout<<"Reading in: file1"<<endl;

    if (file1.is_open())
      {
        file1.seekg(0);
        while (!file1.eof())
          {
          file1 >> i >> j >> intensity;
            pic1[i][j] = intensity;
            //cout<<i<<endl
        }
        file1.close();
        //file1.clear();
    }
    else {
      cout << "Error, cannot open file 1"; }

    cout << "Reading in file 2" << endl;    

    if (file1_2.is_open())
      {
        file1_2.seekg(0);
        while (!file1_2.eof())
          {
        file1_2 >> i >> j >> intensity; //
        pic1_2[i][j] = intensity;
          }
        file1_2.close();
        //file1_2.clear();
        //cout<<i<<endl;
      }
    else {
      cout << "Error, cannot open file 1_2"; }

//A LOAD OF CALCULATIONS//
4

2 に答える 2

0

1 つのファイルだけを読み取るコードを実行する場合、配列を宣言するのは 1 つだけですか、それとも 2 つですか? 配列はどちらも非常に大きく、アプリケーション スタックに配置されます。スタック スペースが大きくなりすぎないのはごく普通のことです。簡単なテストとして、これらの変数をグローバルに移動して、クラッシュが消えるかどうかを確認してください。

于 2013-03-14T11:37:14.473 に答える
0

ほとんどの場合、StackOverflow エラーが発生しています

これはスタックには多すぎます:

double pic1[1392][1040]; //number of pixels
double pic1_2[1392][1040];

それらを関数の外に移動してmain、すばやく修正します。それ以外の場合は、動的割り当てを使用するか、さらに良い方法を使用してくださいstd::vector

于 2013-03-14T11:38:44.087 に答える