0
私はプログラム用の小さなプラグインシステムを作成しています。ファイルの一部はすでに実行されており、ファイルをロードしてコンストラクタ関数を呼び出すことができます。dll/shared-libraryからポインタを戻すと、seg-faultが発生します。
私はいくつかの(クラス)ポインタをハンドラに渡す必要がある関数の1つで、それがseg-faultを取得します。プログラムで
:
class RenderInterface {
public:
RenderInterface();
virtual ~RenderInterface();
void RegisterBufferInterface(BufferInterface* interface)
{
bInterface = interface; // <---- this is where segfault occurs
}
void RegisterCameraInterface(CameraInterface* interface){}
void RegisterRenderInterface(RenderInterface* interface){}
static RenderInterface* GetSingletonPtr()
{
return _singleton;
}
private:
static RenderInterface* _singleton;
BufferInterface* bInterface;
CameraInterface* cInterface
RenderInterface* rInterface;
};
RenderInterfaceは:: _シングルトンが他の場所で0に設定されています。 (DLL)で登録機能で
:これが動作するために
class BInterface : public BufferInterface {
public:
... various stuff ....
}
class GLPlugin : public Plugin {
public:
Plugin() : bInterface(0) {}
~Plugin(){}
void Initialize() // <--- is called after dll has been loaded
{
bInterface = new BInterface();
InterfaceManager::GetSingletonPtr()->RegisterBufferInterface(bInterface); // segfault
// register other stuff
}
private:
BufferInterface* bInterface;
};
は、私が何をしないのですか?それを行う別の方法がありますか?
編集:私はあなたがNULL
に_singleton
を初期化すると仮定してい
static RenderInterface* GetSingletonPtr()
{
return _singleton;
}
:
ありがとう、本当に助けてくれました。私は本当にシングルトンを設定するのを忘れて、3日間で私のミスを見つけることができませんでした! –
static _singleton = new RenderInterface; if文を置き換えることができ、nULLについて心配する必要はありません。 –
@OrgnlDave必ずしもそうではありません。 1RenderInterface'が実行時にのみ知られている他のものに依存するかどうかは関係ありません。これは通常、理由のためにこのように行われます。 –