なぜこの例外をキャッチできないのですか?
私の(クライアント)コード:
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);
ヒットします。これは、関数呼び出し内のどこかで発生します。
クライアントコードからこの例外をキャッチできないのはなぜですか?resize
Eigenライブラリが関数をマークしなかったためthrows
ですか?Eigenライブラリを使用してこのコードをこのmalloc
タイプエラーからスムーズに回復させるにはどうすればよいですか?