diff --git a/Eigen/src/SparseCore/SparseMap.h b/Eigen/src/SparseCore/SparseMap.h index 0ee381354..3e0a5e980 100644 --- a/Eigen/src/SparseCore/SparseMap.h +++ b/Eigen/src/SparseCore/SparseMap.h @@ -127,7 +127,13 @@ class SparseMapBase ScalarPointer valuePtr, IndexPointer innerNonZerosPtr = 0) : m_outerSize(IsRowMajor?rows:cols), m_innerSize(IsRowMajor?cols:rows), m_zero_nnz(0,internal::convert_index(nnz)), m_outerIndex(outerIndexPtr), m_innerIndices(innerIndexPtr), m_values(valuePtr), m_innerNonZeros(innerNonZerosPtr) - {} + { + eigen_assert( + outerIndexPtr == nullptr // Sparse Vector. + || ((m_innerNonZeros == nullptr && outerIndexPtr[m_outerSize] == nnz) // Compressed Matrix. + || (m_innerNonZeros != nullptr && outerIndexPtr[m_outerSize] >= outerIndexPtr[m_outerSize-1] + m_innerNonZeros[m_outerSize - 1]) // Non-compressed Matrix. + && "The outer index ptr must have m_outerSize+1 elements, and the last value must indicate the total size of the valuePtr array.")); + } // for vectors inline SparseMapBase(Index size, Index nnz, IndexPointer innerIndexPtr, ScalarPointer valuePtr)