同时读取两个文件(分段错误)c ++

时间:2013-03-14 11:33:31

标签: c++ arrays io

此代码应读入两个格式为:

的.dat文件

x y强度 e.g:

1 1 70
1 2 0.3
1 3 5

它将在一个文件中读取并显示正确的信息,并与另一个文件相同,但是当我尝试读入两个文件时,尽管编译正确,但仍会出现“分段错误”。我不是百分之百确定为什么,因为一次做一个文件,它的工作原理我觉得它可能不喜欢我在文件中读取的方式。一旦我可以使用它,我将转移到向量,但我仍然在学习它们并且想要首先修复数组。

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//

2 个答案:

答案 0 :(得分:0)

当您运行只读取单个文件的代码时,您是只声明了一个数组还是两个?您的阵列都非常大,并且将被放置在您的应用程序堆栈上,并且堆栈空间不能变得太大是很正常的。作为一个简单的测试,只需将这些变量移动为全局变量,然后查看崩溃是否消失。

答案 1 :(得分:0)

很可能是你得到了StackOverflow错误

这对于堆栈太多了:

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

将它们移出main功能以快速修复它。否则使用动态分配,甚至更好std::vector