我有以下类,
#include <iostream>
using namespace std;
class eventHadler
{
public:
virtual void online(string& str)
{
cout<<" str :"<< str << endl; // accessing str here in this function caused "std::length_error"
}
};
和事件生成器类如下:
class my
{
public:
eventHadler *ptr; // this is initialized in one member function
string localStr;
my()
{
localStr.reserve(1);
ptr = NULL;
}
static void myfun(void* pt);
};
void my::myfun(void* ptMy)
{
my *hdl = static_cast < my* >(ptMy);
hdl->localStr.clear();
hdl->localStr.append("mtfun called");
hdl->ptr->online(hdl->localStr);
}
int main()
{
eventHadler eventobj;
my myObj;
myObj.ptr = &eventobj;
my::myfun((void*)&myObj);
return 0;
}
但是对于my::myfun()
的调用,将localStr传递给online()
函数会导致以下
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_S_create
我不能重现上面的错误,但它发生在我的开发代码。
解决这个错误的指针。
p。S:我不能改变myfun()
原型
您可能尝试创建一个负长度的字符串。