gpt4 book ai didi

c++ - 从 dll/共享库返回指针会导致段错误

转载 作者:行者123 更新时间:2023-11-28 00:57:46 25 4
gpt4 key购买 nike

我正在为程序编写一个小型插件系统。它的某些部分已经完成,加载文件并调用构造函数。

在其中一个函数中,我需要将一些(类)指针传递回处理程序,这就是我遇到段错误的地方。

在程序中:

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::_singleton 在其他地方设置为 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;
};

要使它起作用,我缺少什么?还有其他方法吗?

编辑:在简化代码时错过了 BufferInterface 之后的 *,感谢 Luchian

最佳答案

嗯,它崩溃了,因为你从来没有初始化你的单例:

static RenderInterface* GetSingletonPtr()
{
return _singleton;
}

我假设您在实现文件中将 _singleton 初始化为 NULL,在这种情况下您需要:

static RenderInterface* GetSingletonPtr()
{
if ( !_singleton )
_singleton = new RenderInterface;
return _singleton;
}

其他一些提示:

  • 在使用单例之前评估其他选项
  • 实现析构函数通常意味着您还需要复制构造函数和赋值运算符(三规则)
  • 如果您的类确实是单例,构造函数不应该是 private 吗?
  • bInterface = new BInterface(); 是非法的,因为 bInterface 是一个对象,而不是指针。

关于c++ - 从 dll/共享库返回指针会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com