关于 boost 库: boost::archive::binary_iarchive,关于内存分配 高手快来
是这样的,我正在开发一个 第三方软件的插件 ,插件其实就是一个 动态库(dll) ,我们可以就把它当作 一个 dll 来看待:
在开发插件的时候, 需要序列化, 我第一时间就是想到了用 boost 库的序列化。但是问题来了。
在我需要用到 boost序列化库的 源码中,包含 序列化头文件
#include <boost/serialization/access.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
然后在函数中写了这个:
std::ifstream ifs("d:\\haha.bin");
boost::archive::binary_iarchive ia(ifs);
运行应用程序的时候,这个插件就不能正确加载。
问题就出在 上面 红色颜色 的代码, 将这行代码去掉就没有事情了。
经过调试分析,程序根本就没有运行到这个代码,说得更明白点, 连 dll 的入口函数都没有进来。
根据主程序加载 这个 dll失败后,给出的提示: 是因为内存分配失败还是泄漏什么的,并抛出了一个异常
the 0x75a0b727 of the most likely exception: Microsoft C + + exception: the memory location 0x0018f404 at std:: bad_alloc.
因为上面加的那行代码,是放在一个函数里面的,是个局部变量。 但是程序根本就没有运行到这里来。为什么会出现内存错误呢?
我想可能是有这样的问题: boost::archive::binary_iarchive 这个类里面可能有些 静态全局变量, 在构造这个类的对象之前,就已经先构造了这部分静态全局变量,而这部分 静态全局变量,可能用到了自己的内存分配方式,导致主应用程序无法去管理这部分内存。
但是我观摩了 一下 boost::archive::binary_iarchive 这个类,并没有发现什么地方用到了这个静态全局变量。 难道是我的思路出现了错误? 或者是 在动态库里面不能这样调用 boost 序列化库,或者是还要加上一些其他的参数?
这个问题已经困扰了我3天3夜,在我百思不得其解的情况下,我只好把它搬上到伟大的CSDN,把它呈献到各位大侠面前,希望在这里能碰到大师,给我指明前进的道路。
附: 我的 dll 是采用的 静态链接到 boost 序列化库的。