0

テストに使用しているc++コードがいくつかあります。最初の行は、共有オブジェクトをロードするためのdlopenの呼び出しです。この行に到達すると、次のエラーが発生します。

Terminate called after throwing an instance of std::bad_alloc: 
   what() : St9bad_alloc

メモリを増やしましたが(free -mは、exeがgdbにロードされたときに最大120 MBの空きがあると報告します)、それでも同じメッセージが表示されます。

他に何がこれを引き起こしている可能性があり、それを解決するために私が何ができるかについてのアイデアはありますか?

4

3 に答える 3

4

C ++ dlopenminiHOWTOをご覧ください。お役に立てば幸いです。

于 2009-07-29T13:20:33.130 に答える
2

私の推測では、dlopenはそれとは何の関係もありません。dlopen()はC言語関数であり、例外をスローすることはできません。実際にスローできるのは、静的オブジェクトに割り当てる式など、共有オブジェクトの初期化関数です。たとえば、ロードしている共有オブジェクトにこれを書き込むと、bad_allocでクラッシュする可能性があります。

// dso.cpp start
#include <dso.h>

Object* instance = new Object();

// the rest of the file

しかし、dlopenのものはまったく無関係だと思います。

于 2009-09-01T21:06:31.277 に答える
0

おそらく、すべての依存関係を見つけることができないためです。

ディレクトリを、アプリケーションが存在するディレクトリに変更します。
次に、ロードしようとしている共有ライブラリでnmを使用します(コードで使用したのと同じパス)。
これにより、欠落している依存関係が表示されます。

于 2009-07-29T17:33:05.460 に答える