1. 起因
最近程序老是崩溃在调用动态库接口的代码附近,经过半天的代码审查,也没有看出来什么门道。
最后求助网络,发现原来C++标准库容器不能用来作为接口的一部分使用。这和模板的跨库问题是同一个问题。
2. 问题分析
相关技术分析,参考以下文章:
【C/C++笔记】之在动态链接库中传递STL容器的引用或指针
3. 解决方案
- 方案一:使用纯C接口,代替C++接口,自然就不存在容器的问题。
- 方案二:使用Qt容器,即QTL,代替C++标准库中的容器。参考: Qt中的容器QVector, QList等,是否可以跨dll使用?
另外,在Windows上,还存在一个内存谁申请的必须由谁释放的要求,或者使用多线程调试/MD选项。参考:
关于在dll中申请内存,外部释放的问题
本质上还是变量跨库与链接的问题。
4. 最后
关于动态库内存管理,以及常见的坑,基本上只有以上两点,使用的时候采用安全保守的写法即可。