我有以下课程,
#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()
原型。
答案 0 :(得分:0)
您可能尝试创建一个负长度的字符串。