2016-04-29 22 views
-2

私の問題は、私は私のプログラムのクラッシュ別の2Dベクトルによって2Dベクトルを乗算し、別の2次元ベクトルの処理の結果を保存しようとすると、2次元ベクトル乗算

int main() 
{ 

    vector< vector<double> > Mat_1; 
    vector< vector<double> > Mat_2; 
    vector< vector<double> > Mat_3; 
// Generate 2D vector 5 by 5 
    setVector(Mat_1,5,5); 
    setVector(Mat_2,5,5); 

    for(int i=0; i<5;i++) 
    { 
     for(int j=0;j<5;j++) 
     { 
      Mat_3[i][j] = 0; 

      for(int k=0;k<5;k++) 
      { 
       Mat_3[i][j] += Mat_1[i][k] * Mat_2[k][j]; 
      } 
     } 
    } 


    return 0; 
} 
+4

しますか? – sietschie

+0

「クラッシュ」は問題の説明ではありません。デバッガを使用して問題を突き止める。 – Drop

+0

私はそれを設定していませんでしたか? –

答えて

1

3番目の行列を初期化しておらず、インデックス作成操作を行っています。これは未定義の動作です。これを行うことができます....

void init_2Dvector(vector<vector<double> >& vec, int x_dim, int y_dim){ 
    vec.resize(x_dim); 
    for(int i=0; i < vec.size(); i++) 
     vec[i].resize(y_dim); 
} 

int main() 
{ 

    vector< vector<double> > Mat_1; 
    vector< vector<double> > Mat_2; 
    vector< vector<double> > Mat_3; 
// Generate 2D vector 5 by 5 
    setVector(Mat_1,5,5); 
    setVector(Mat_2,5,5); 

// Set dimension for result 
    init_2Dvector(Mat_3, 5, 5); 

    for(int i=0; i<5;i++) 
    { 
     for(int j=0;j<5;j++) 
     { 
      Mat_3[i][j] = 0; 

      for(int k=0;k<5;k++) 
      { 
       Mat_3[i][j] += Mat_1[i][k] * Mat_2[k][j]; 
      } 
     } 
    } 


    return 0; 
} 
+0

投票は今他の方向にあります:) – user2079303

+0

正確な結果が得られません! –

+0

@ Rafikox05、あなたはどんな正確な結果を期待していますか? – WhiZTiM

1

この行は、問題が発生するということです。

Mat_3[i][j] = 0; 

(少なくともあなたが示したコードから)あなたはMat_3を初期化することはありませんので、追加してください:

setVector(Mat_3,5,5); 
+0

setVector()はランダムな値を持つベクトルを初期化します:) –

0

Mat_3を初期化する必要があります。他の行列と同じように次元を設定してください。

あなたが適切なライブラリとを含めると、この動作するはずはない使用あなたが `Mat_3`の寸法を設定するのですusing namespace std;

int main() 
{ 
    std::vector<std::vector<double>> Mat_1; 
    std::vector<std::vector<double>> Mat_2; 
    std::vector<std::vector<double>> Mat_3; 
    setVector(Mat_1,5,5); 
    setVector(Mat_2,5,5); 
    setVector(Mat_3,5,5); // here initialize 

    for(int i=0; i<5;i++) 
    { 
     for(int j=0;j<5;j++) 
     { 
      Mat_3[i][j] = 0; // here assigning zeros 

      for(int k=0;k<5;k++) 
      { 
       Mat_3[i][j] += Mat_1[i][k] * Mat_2[k][j]; // operation 
      } 
     } 
    } 
    return 0; 
}