关于c++内存跨dll分配和释放问题

稀饭桶子 发布于 2016/10/25 09:29
阅读 469
收藏 0

目前我有一个dll, 有这么一个导出函数

void func(const char* pszIn,std::string& out);

但是这样会出现一个问题,因为out修改后的内存是dll里面分配的,

然后在主程序里面释放会导致崩溃问题。

这个问题真让人头大,我真的想传递一个std::string进去啊,

这样就可以动态分配长度了。

加载中
1
好远
好远

如果调用方和被调用方编译器链接选项和版本一样的话一般没有问题,否则的话肯定不能传入std::string


1
楼雨
楼雨
调整VS的编译属性就可以了;自己找一下 /MD 与 /MT、/MTD与/MDD的区别
bastetwang
bastetwang
这才是正解。要全部用/MD或者/MDD
0
LoveCupid
LoveCupid
你是怎么在dll里分配的?个人觉得跨动态库new 和 delete (malloc 和 free) 是可以的,猜测你在dll分配的是栈空间?
0
GestureWei
GestureWei
这个不存在内存分配释放的问题,动态库已经被载入了当前进程的地址空间,链接的都是c运行时的内存分配释放函数。你这个问题一定在其他方面,贴源代码
GestureWei
GestureWei
对了,你要看看动态库和你这个程序所链接的C及C++运行时库版本是否是一致的,不一致的话,确实会存在问题
0
快乐的一只小青蛙
快乐的一只小青蛙

这样不行的。

如果需要在dll分配内存,还是使用二级指针传进去吧,然后再dll里写个释放函数

0
孤独的阅读者
孤独的阅读者

可以使用二级指针,在dll中申请内存,在外部释放。

或者在dll中添加内存释放函数接口

返回顶部
顶部