なぜこの例外をキャッチできないのですか?
私の(クライアント)コード:
Eigen::MatrixXd FFs ;
try
{
FFs.resize( NUMPATCHES, NUMPATCHES ) ;
}
catch( int e )
{
error( "Not enough memory :(" ) ;
return ;
}
例外をスローするEigenコードは、数レベル下にあります。
EIGEN_STRONG_INLINE void resize(インデックス行、インデックス列)
{{
internal :: check_rows_cols_for_overflow(rows、cols);
m_storage.resize(rows * cols、rows、cols);
}
どの呼び出し
void resize(DenseIndex size、DenseIndex rows、DenseIndex cols)
{{
if(size!= m_rows * m_cols)
{{
internal :: conditional_aligned_delete_auto(m_data、m_rows * m_cols);
if(サイズ)
m_data = internal :: conditional_aligned_new_auto(size);
そうしないと
m_data = 0;
EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN
}
m_rows=行;
m_cols = cols;
}
太字の線は、線の前にヒットする線です。
throw std::bad_alloc();
internal::conditional_aligned_delete_auto(m_data, m_rows*m_cols);ヒットします。これは、関数呼び出し内のどこかで発生します。
クライアントコードからこの例外をキャッチできないのはなぜですか?resizeEigenライブラリが関数をマークしなかったためthrowsですか?Eigenライブラリを使用してこのコードをこのmallocタイプエラーからスムーズに回復させるにはどうすればよいですか?