一名热爱体感技术的
业余专业开发人员

[C++ Debug]DLL返回vector导致堆栈错误

这几天尝试创建一个dll玩,遇到一个困扰多时的bug,这个bug出现比较诡异。首先在vs中调用该dll没问题,在qt中调用却产生堆栈错误,错我大概是dbheap.c什么析构出问题了。搜索网络,首先排查运行时库是否正确,在编译生成dll和exe程序中都用的一样。然后搜到这篇文章,返回const引用则治好了这个问题,转载到这里以防万一,vector还是不会太会用~

下文转载自http://www.voidcn.com/blog/han6771306/article/p-1842348.html

今天在调试程序的时候遇到了这个问题。

先给出出问题的代码:

调用该dll的代码:

其中_priv_list,_grp_list都是CContactDialog的vector<string>类型的成员变量。

出错提示:

在网上搜了下问题:

解决:

把生成dll的代码修改如下

 

我的理解是:

vector<string>作为返回值的时候,在dll中为临时对象分配内存,被调用dll的代码中超出该临时对象的作用域范围时,临时对象将被销毁,带正如上面说的一样,内存是在dll中分配的,却在调用dll的代码中释放,所以出现了错误。改成const vector<string>&后,dll中将不会产生临时对象,就不会出想这个问题。