aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src
diff options
context:
space:
mode:
authorGravatar Hauke Heibel <hauke.heibel@gmail.com>2010-09-23 11:15:36 +0200
committerGravatar Hauke Heibel <hauke.heibel@gmail.com>2010-09-23 11:15:36 +0200
commit62bf04b339d0e393728a561cc236003400c532e9 (patch)
treed863042cbf83d8c46870c8ebc7cf621067b108b2 /Eigen/src
parente0ea25fc213a49198190ead2cdc9da3d3b59f21e (diff)
Fixed bad memory access in the SVD.
Diffstat (limited to 'Eigen/src')
-rw-r--r--Eigen/src/SVD/SVD.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/Eigen/src/SVD/SVD.h b/Eigen/src/SVD/SVD.h
index 76c1995b8..7379b72f4 100644
--- a/Eigen/src/SVD/SVD.h
+++ b/Eigen/src/SVD/SVD.h
@@ -464,7 +464,7 @@ struct ei_solve_retval<SVD<_MatrixType>, Rhs>
{
Matrix<Scalar,MatrixType::RowsAtCompileTime,1> aux = dec().matrixU().adjoint() * rhs().col(j);
- for (Index i = 0; i < dec().rows(); ++i)
+ for (Index i = 0; i < dec().singularValues().size(); ++i)
{
Scalar si = dec().singularValues().coeff(i);
if(si == RealScalar(0))
@@ -472,6 +472,8 @@ struct ei_solve_retval<SVD<_MatrixType>, Rhs>
else
aux.coeffRef(i) /= si;
}
+ aux.tail(aux.size() - dec().singularValues().size()).setZero();
+
const Index minsize = std::min(dec().rows(),dec().cols());
dst.col(j).head(minsize) = aux.head(minsize);
if(dec().cols()>dec().rows()) dst.col(j).tail(cols()-minsize).setZero();