如何修复ifstream的seg fault core dumped错误

时间:2014-10-22 04:57:30

标签: c++ matrix segmentation-fault

输入文件

9
2 8
0 6
8 5
2 4
3 1
2 3
4 1
6 1
2 6
7 5
1 7

代码

#include<iostream>
#include<fstream>
using namespace std;

int main(void)
{
   ifstream in;

   char infile[40];
   int c, u, v;

   cout << "Please enter the input data file name(NO SPACES): ";
   cin >> infile;

   in.open(infile);
   while(in.fail()) {
      cout << "Please enter a CORRECT input data file name(NO SPACES): ";
      cin >> infile;
      in.open(infile);
   }


   //adj matrix
   c = in.get();
   int array[c-1][c-1];
   for(int i=0; i<c; i++) {
      for(int j=0; j<c; j++) {
         array[i][j] = 0;
      }
   }

   while(!in.eof()) {
      u = in.get();
      v = in.get();
      array[u][v] = 1;
   }

   cout << c << endl;
   for(int i=0;i<c;i++) {
      cout << i << "   ";
      for(int j=0;j<c;j++){
         cout << array[i][j] << " ";
      }
      cout << endl;
   }

   in.close();

   return 0;
}

输出应该是什么样的

9
0   0 0 0 0 0 0 1 0 0
1   0 0 0 0 0 0 0 1 0 
2   0 0 0 1 1 0 1 0 1
3   0 1 0 0 0 0 0 0 0
4   0 1 0 0 0 0 0 0 0
5   0 0 0 0 0 0 0 0 0
6   0 1 0 0 0 0 0 0 0
7   0 0 0 0 0 1 0 0 0
8   0 0 0 0 0 1 0 0 0

当提示输入文件名时,如果我输入了错误的文件名,它将继续提示我输入CORRECT文件,但是当输入CORRECT文件名时,我得到&#34;分段错误(核心转储)& #34;

我想要输出输入文件中给出的相应边的邻接矩阵。

1 个答案:

答案 0 :(得分:1)

std::basic_istream::get将一次提取一个字符。因此'9'9

不同

请按照 进行操作,假设您的文件实体正确且格式已知

   in >> c;
   int array[c][c]; // Indices from 0 to c-1
   for(int i=0; i<c; i++) {
      for(int j=0; j<c; j++) {
         array[i][j] = 0;
      }
   }

   while( in >> u >> v) {
      array[u][v] = 1;
   }

同样使用std::string作为文件名而不是char数组。然后你可以使用

in.open( infile.c_str() ); // Pre C++11

或直接

in.open(infile); // with C++11