Matrixmultiplikation mit std::array



  • Hallo zusammen,

    ich experimentiere gerade mit einer selbst geschriebenen Matrixklasse und wollte zu Testzwecken auch die Matrixmultiplikation mit den Containern der Standardbibliothek (std::vector und std::array) testen. Mit meiner eigenen Klasse und std::vector gibt es keine Probleme, wohl aber mit std::array:

    Minimalbeispiel:

    #include <iostream>
    #include <random>
    #include <array>
    #include <ctime>
    
    using namespace std;
    
    array<array<int,1000>,1000> mat_mul(const array<array<int,1000>,1000>& lhs,
    		const array<array<int,1000>,1000>& rhs) {
    
    	array<array<int,1000>,1000> res{};
    
    	for(int i=0;i<1000;++i) {
    		for(int j=0;j<1000;++j) {
    			res[i][j] = 0; // should be redundant
    			for(int k=0;k<1000;++k) {
    				res[i][j] += lhs[i][k] * rhs[k][j];
    			}
    		}
    	}
    	return res;
    }
    
    int main() {
    	default_random_engine engine{(long unsigned int)time(0)};
    	uniform_int_distribution<int> w{1,10};
    
    	array<array<int,1000>,1000> lhs{}, rhs{};
    	for(int i=0;i<1000;++i) {
    		for(int j=0;j<1000;++j) {
    			lhs[i][j] = w(engine);
    			rhs[i][j] = w(engine);
    		}
    	}
    
    	array<array<int,1000>,1000> res = mat_mul(lhs, rhs);
    }
    

    Der compiler meckert nicht, das Programm endet aber mit einem seg-fault.
    Hat jemand eine Ahnung, was hier schief laueft?

    Viele Gruesse,
    Urwald



  • @Urwald sagte in Matrixmultiplikation mit std::array:

    Hat jemand eine Ahnung, was hier schief laueft?

    Das Array wird wohl nicht auf den Stack passen.



  • Hmm, das war tatsaechlich das Problem. Vielen Dank fuer deine Hilfe!


Log in to reply