主程序调用DLL接口函数时内存分配/释放出了点问题
准备用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中返回的堆地址对于主调过程有歧义造成释放时异常?
不知道是不是把问题说清楚了,请高手指教。谢谢!
使用标准库的容器类模板来管理数据,
在定义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中返回的堆地址对于主调过程有歧义造成释放时异常?
不知道是不是把问题说清楚了,请高手指教。谢谢!
...全文
相关推荐
DLL接口函数查看工具
DLL接口函数查看工具,DLL接口函数查看工具,DLL接口函数查看工具
CyUSB.dll文件调用接口函数说明
CyUSB.dll接口函数的详细说明。 之前发的只是sys驱动和dll文件,没有包含此说明,现在补上,资源分免了!
C++ 导出dll接口函数 C++ 导出dll接口函数 C++ 导出dll接口函数
C++ 导出dll接口函数 C++ 导出dll接口函数 C++ 导出dll接口函数
主程序调用打开DLL窗体,DLL窗体发消息控制主程序
主程序调用打开DLL窗体,DLL窗体发消息控制主程序,很简单的代码,仅供参考
DLL中的窗体和主程序进行交互显示信息
DLL中的窗体和主程序进行交互显示信息


