主程序调用DLL接口函数时内存分配/释放出了点问题

two_ears two_ears 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
准备用DLL的形式来模块化各个功能点,
使用标准库的容器类模板来管理数据,
在定义DLL接口函数的时候,用了string的引用作为参数。如下所示。

DLL接口函数:
void Get(string &strBuf)
{
strBuf="abc";
}

宿主进程调用如下:
{
...
string str;
Get(str);
...
}
结果到了这里,str析构时就会出现异常。
我想可能是我对string的理解有些问题。

此后,我以为是string在释放内存造成的,于是又做了一些尝试,
1.在Get函数中用new分配内存,由调用者释放,也会出现同样的异常。
2.如果Get不是在DLL中实现,和调用过程放在一个映象文件中,这两种分配方式都不会有问题。
3.只要我调用DLL中的过程,但不释放其中分配的内存,就一切正常。(允许修改)

这让我不太明白,DLL中的过程应该和调用者在一个进程,内存空间应该是共享的,
难不成DLL中返回的堆地址对于主调过程有歧义造成释放时异常?

不知道是不是把问题说清楚了,请高手指教。谢谢!
...全文
评论 35
收藏 已收藏
分享
返回顶部
two_ears
C++ 语言 65,214 成员 250,514 内容