动态库间调用返回空串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