0

プログラムを Windows から Linux に移動したところ、正常に動作していた同じコードで、main から operator<< 関数を呼び出すときにセグメンテーション エラーが発生します。(概要) 私のプログラムは、入力を受け取り、その入力が何であるかを返す Vector クラスですが、到達するとクラッシュし、そこから<< endl削除するとクラッシュしませんか?endlmain()

..///main


VecXd<int> x;                                           
        cout << "Input vector a\n"; 

cin >> a;


cout << "Test A: "<< a << endl; //seg fault, -> 
cout << "Test A: " << a; //works

//----- class VecXd\\ opertor<< def + operator>>

  /******************************************************/
   friend istream &operator>>(istream &input, VecXd& vec)
   {

         for(int i = -1; i <= vec.dimension - 1; i++)
         {
           if(i == -1)
           {
           input >> vec.dimension;//>> (V vecArr = new V[vec.dimension]);
           cout << vec.dimension << " dimension check" << endl;
           vec.vecArr = new V[vec.dimension];
                                //vec.dimension = vecArr[0];
                                //cout << vec.dimension << " dimension check" << endl;
           }
           else
           {
           input >> vec.vecArr[i];//>> (V vecArr = new V[vec.dimension]);
           cout << vec.vecArr[i] << " value check" << endl;
           }
         }


   }

   friend ostream& operator<<(ostream& output, const VecXd& vec)
   {
          for(int i = 0; i < vec.dimension; i++)
          {
          output << vec.vecArr[i] << " ";

          }
          output << endl;
         // output << endl;

   }
   /****************************************************/

endl がクラッシュするのはなぜですか? endl を出力する end of array はこの問題を解決しませんか?

4

1 に答える 1

3

ostream&(and )を返すのを忘れていistream&ます。

-Wallgcc/clang/icc を使用している場合は、コンパイル コマンドにフラグを追加します。

于 2013-09-19T13:53:51.270 に答える