C++ 动态库段错误

标签 c++ dynamic

我正在用 C++ 编写网络应用程序,我想启用制作插件,但我不知道该怎么做,以保护我的应用程序免受段错误等错误的影响。例如: 我有界面:

class IPlugin{
public:
  IPlugin();
  virtual ~IPlugin();
  virtual void callPlugin() = 0;
}

然后有人会写动态库:

class Plugin : public IPlugin{
public:
  Plugin();
  virtual ~Plugin();
  virtual void callPlugin();
}

void Plugin::callPlugin(){
  int* a = NULL;
  *a = 5;
}

在我的应用程序中调用此函数将终止一切。我知道我可以使用fork(),但是插件中的函数会很短并且会被多次使用,所以我认为fork() 太慢了。有什么想法吗?

附言。对不起我的英语。

最佳答案

试图保护您免受加载到您的地址空间中的错误代码的影响,这是一场失败的战斗。这些插件可能会造成您永远无法恢复的真正损害。

要么接受有问题的插件会导致您的应用程序崩溃的事实,要么您必须按照您的建议将插件隔离在一个单独的进程中。但是你只需要调用 fork 一次,当你加载插件时,不用担心它会很慢。真正的工作是使用某种形式的 IPC 从您的应用程序与插件进行通信 - 管道可能是合适的。

关于C++ 动态库段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6297006/

相关文章:

c++ - 非常量大小的数组 : Why does this even work?

c++ - 结构中指针的动态数量

c++ - 在 GMP 的 mpz_t 和 NTL 的 ZZ 之间转换

c++ - 在 C++ 函数签名中使用 & 运算符

C++ DWORD* 到 BYTE*

java - 如何在java中访问动态字符串数组的元素?

c++ - 在 C++ 上使用 Levensthein 算法创建多距离矩阵

c++ - 一个线程Boost的死锁

c# - 使用 AssemblyBuilder 构建资源程序集

php - 开发动态 jQuery Mobile 移动应用程序的最佳方式是什么?