• 4182阅读
  • 4回复

[提问]动态库间调用返回空串string,调试提示出错Rtlfreeheap错误。 [复制链接]

上一主题 下一主题
离线daihaixiang
 

只看楼主 倒序阅读 楼主  发表于: 2012-02-09
关键词: 求助问题QT4
问题描述:
          动态库LIbA 里面的LIbAClass 类被动态库LibB里面的LIbBClass,LIbAClass 返回的是新创建的空字符串string 字符串 在释放时候提示
HEAP[mainpro.exe]:
Invalid Address specified to RtlFreeHeap( 003E0000, 6AFD0A3C )

代码简介:
动态库LIbA 里面的LIbAClass 类  
class LIBASHARED_EXPORT LibAClass
{
public:
    LibAClass();
    ~LibAClass();
    std::string *GetStr();
};


#include "libaclass.h"LibAClass::LibAClass()
{
}
LibAClass::~LibAClass()
{
    std::cout<<"destory LibAClass"<<std::endl;
}
std::string* LibAClass::GetStr()
{
//如果string 为空调试时候则出现 Rltfreeheap 错误
   return new std::string("");
//如果string 不为空这不会出现 Rltfreeheap 错误
// return new std::string("abc");
}
动态库LIbB 里面的LIbBClass 类    

class LIBBSHARED_EXPORT LibBClass
{
public:
    LibBClass();
    void TestStr();
};#endif // LIBBCLASS_H


void LibBClass::TestStr()
{
    LibAClass *libAClass;
    for(int i = 0;i<3;++i)
    {
        libAClass = new LibAClass  ;
        std::cout<<"11111"<<std::endl;
        std::string* tempStr = libAClass->GetStr();
        //      std::string* s =new std::string;
        std::cout<<"22222"<<std::endl;
        delete tempStr;//调试删除申请空间出错
        std::cout<<"33333"<<std::endl;
        delete libAClass;
        std::cout<<"44444"<<std::endl;
    }
}
//主程序
#include <QtCore/QCoreApplication>
#include "libbclass.h"int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    LibBClass Bclass;    Bclass.TestStr();
    return a.exec();
}  

该错误需要在调试模式下才能看到。
希望各位兄弟指导一下。谢谢
代码下载地址:
http://115.com/file/e7owca42



离线daihaixiang

只看该作者 1楼 发表于: 2012-02-10
兄弟们有没有解决的方案啊~~
离线daihaixiang

只看该作者 2楼 发表于: 2012-02-10
离线daihaixiang

只看该作者 3楼 发表于: 2012-02-10
跨DLL,要保证哪里申请,哪里删除。
所以,不要传CString的引用进去。
改成:

GetName(const CString &str)
离线daihaixiang

只看该作者 4楼 发表于: 2012-02-10
快速回复
限100 字节
 
上一个 下一个