2016-04-29 18 views
-2

mein Problem ist, dass wenn ich versuche, ein 2D-Vektor von einem anderen 2D-Vektor und das Ergebnis des Prozesses in einem anderen 2D-Vektor-Absturz meines Programms2D-Vektor-Multiplikation

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

Wo setzen Sie die Dimensionen von 'Mat_3'? – sietschie

+0

"Crash" ist keine Problembeschreibung. Verwenden Sie einen Debugger, um ein Problem zu untersuchen. – Drop

+0

habe es nicht eingestellt, sollte ich? –

Antwort

1

Sie haben die 3. Matrix nicht initialisiert, und Sie führen Indizierungsoperationen durch, das ist Undefined Behavior. Sie können dies tun ....

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

Abstimmung ist jetzt in die andere Richtung :) – user2079303

+0

Nicht das genaue Ergebnis! –

+0

@ Rafikox05, welche genauen Ergebnisse erwarten Sie? – WhiZTiM

1

Diese Linie Probleme verursacht zu multiplizieren:

Mat_3[i][j] = 0; 

Da Sie (atleast aus dem Code, den Sie zeigte) nie Mat_3 initialisieren, versuchen Sie:

setVector(Mat_3,5,5); 
+0

setVector() wird einen Vektor mit zufälligen Werten initialisieren :) –

0

Sie müssen Mat_3 initialisieren. Stellen Sie also sicher, dass Sie die Abmessungen wie bei anderen Matrizen einstellen.

Dies sollte funktionieren, wenn Sie die richtigen Bibliotheken enthalten und nicht Verwendung 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; 
}