为什么我不能捕捉到这个异常?
我的(客户)代码:
Eigen::MatrixXd FFs ;
try
{
FFs.resize( NUMPATCHES, NUMPATCHES ) ;
}
catch( int e )
{
error( "Not enough memory :(" ) ;
return ;
}
引发异常的特征代码低了几级..
EIGEN_STRONG_INLINE void resize(索引行,索引列) { 内部::check_rows_cols_for_overflow(rows, cols); m_storage.resize(rows*cols, rows, cols); }
哪个电话
void resize(DenseIndex size, DenseIndex rows, DenseIndex cols) { 如果(大小!= m_rows*m_cols) { 内部::conditional_aligned_delete_auto(m_data, m_rows*m_cols); 如果(大小) m_data = internal::conditional_aligned_new_auto(size); 别的 m_data = 0; EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN } m_rows = 行; m_cols = 列; }
粗体线是在该行之前被击中的行:
throw std::bad_alloc();
被击中,这发生在internal::conditional_aligned_delete_auto(m_data, m_rows*m_cols);
函数调用内部的某个地方。
为什么我不能从我的客户端代码中捕捉到这个异常?是因为 Eigen 库没有用 标记resize
函数throws
吗?如何使用 Eigen 库使此代码malloc
顺利地从此类错误中恢复?