为什么我不能捕捉到这个异常?
我的(客户)代码:
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顺利地从此类错误中恢复?