【发布时间】:2011-09-17 15:42:15
【问题描述】:
我有一个名为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 )
谁能建议我应该如何调试这个问题?
【问题讨论】:
-
代码看起来没问题。您是否修改了头文件而不重新编译包含它的文件? (例如,如果您正在使用 Makefile 并且在其中定义了这些目标,则执行
make clean然后make) -
这看起来是gcc的内部问题,见stackoverflow.com/questions/7038124/…。