我有一个名为Sample
的类,其中包含value
类型的参数std::string
。
有一个公共成员函数setValue(std::string tempdata)
,用于设置该成员的值。
void Sample::setValue( std::string tempdata ) { this->value= tempdata; }
从应用程序中我必须设置此参数的值。 我做了类似的事情:
std::string tempvalue = "Hello";
Sample s;
s.setValue( tempvalue );
当我运行应用程序时程序崩溃并通过gdb进行调试我得到:
#0 0x049da761 in __gnu_cxx::__exchange_and_add () from /usr/lib/libstdc++.so.6
#1 0x049c0e6e in std::string::assign () from /usr/lib/libstdc++.so.6
#2 0x049c0ed1 in std::string::operator= () from /usr/lib/libstdc++.so.6
#3 0x08075e9b in Sample::setValue (this=0x83779a8, tempdata=Cannot access memory at address 0xffffffff )
任何人都可以建议我应该如何调试此问题?
答案 0 :(得分:2)
您展示的代码是正确的。所以错误是其他的。例如,它可能是某些早期的堆栈或堆损坏,直到这些代码行被执行才会被注意到。