Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

When I call transpose function I got this error: Error :

std::length_error at memory location

I do not know exactly what could cause the error

//class Matrix.h
class Matrix
{
private:
    std::vector<std::vector<double>> content;
    size_t numberOfRows;
    size_t numberOfColumns;
    double determinant;
};

inline Matrix::Matrix(size_t nRows, size_t nColumns)
    : content(nRows,std::vector<double>(nColumns)),
      numberOfRows(nRows), numberOfColumns(nColumns) {}

const double getValue(size_t i, size_t j) const { 
    return (i >= numberOfRows) || (j >= numberOfColumns) ? NULL : content[i][j]; 
}

void setValue(size_t i, size_t j, double value) {
    (i >= numberOfRows) || (j >= numberOfColumns) ? content[i][j] = NULL : content[i][j] = value;
    determinant = NULL;
}

Matrix Matrix::transpose()
{
    Matrix result(numberOfColumns, numberOfRows);
    for (size_t i = 0; i < numberOfRows; i++)
        for (size_t j = 0; j < numberOfColumns; j++)
            result.setValue(j, i, getValue(i, j));
    return result; /// Error here
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
354 views
Welcome To Ask or Share your Answers For Others

1 Answer

The solution is return the object as a pointer or pass a variable as reference, here is the correct example:

Matrix* Matrix::transpose()
{
    Matrix *result=new Matrix(numberOfColumns, numberOfRows);
    for (size_t i = 0; i < numberOfRows; i++)
        for (size_t j = 0; j < numberOfColumns; j++)
            result.setValue(j, i, getValue(i, j));
    return result;
}

Thank you


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...