当前位置:编程学习 > wap >>

动态库间调用返回空串string,调试提示出错Rtlfreeheap错误

问题描述:
          动态库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 --------------------编程问答-------------------- std::string* LibAClass::GetStr()
{
//如果string 为空调试时候则出现 Rltfreeheap 错误
   return new std::string("");
//如果string 不为空这不会出现 Rltfreeheap 错误
// return new std::string("abc");
}  

没看出什么问题。
string类的构造函数:
string(const char *s);    //用c字符串s初始化
string(int n,char c);     //用n个字符c初始化
此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常 


return new std::string; 也会错吗?
补充:移动开发 ,  Qt
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,