mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-17 22:25:55 +08:00
Fix nullptr dereference in SVD.
This commit is contained in:
parent
86a43d8c04
commit
2af700aa40
@ -341,11 +341,15 @@ void upperbidiagonalization_inplace_blocked(MatrixType& A, BidiagType& bidiagona
|
|||||||
// Finally, the algorithm continue on the updated A22.
|
// Finally, the algorithm continue on the updated A22.
|
||||||
//
|
//
|
||||||
// However, if B is too small, or A22 empty, then let's use an unblocked strategy
|
// However, if B is too small, or A22 empty, then let's use an unblocked strategy
|
||||||
|
|
||||||
|
auto upper_diagonal = bidiagonal.template diagonal<1>();
|
||||||
|
typename MatrixType::RealScalar* upper_diagonal_ptr = upper_diagonal.size() > 0 ? &upper_diagonal.coeffRef(k) : nullptr;
|
||||||
|
|
||||||
if(k+bs==cols || bcols<48) // somewhat arbitrary threshold
|
if(k+bs==cols || bcols<48) // somewhat arbitrary threshold
|
||||||
{
|
{
|
||||||
upperbidiagonalization_inplace_unblocked(B,
|
upperbidiagonalization_inplace_unblocked(B,
|
||||||
&(bidiagonal.template diagonal<0>().coeffRef(k)),
|
&(bidiagonal.template diagonal<0>().coeffRef(k)),
|
||||||
&(bidiagonal.template diagonal<1>().coeffRef(k)),
|
upper_diagonal_ptr,
|
||||||
X.data()
|
X.data()
|
||||||
);
|
);
|
||||||
break; // We're done
|
break; // We're done
|
||||||
@ -354,7 +358,7 @@ void upperbidiagonalization_inplace_blocked(MatrixType& A, BidiagType& bidiagona
|
|||||||
{
|
{
|
||||||
upperbidiagonalization_blocked_helper<BlockType>( B,
|
upperbidiagonalization_blocked_helper<BlockType>( B,
|
||||||
&(bidiagonal.template diagonal<0>().coeffRef(k)),
|
&(bidiagonal.template diagonal<0>().coeffRef(k)),
|
||||||
&(bidiagonal.template diagonal<1>().coeffRef(k)),
|
upper_diagonal_ptr,
|
||||||
bs,
|
bs,
|
||||||
X.topLeftCorner(brows,bs),
|
X.topLeftCorner(brows,bs),
|
||||||
Y.topLeftCorner(bcols,bs)
|
Y.topLeftCorner(bcols,bs)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user