c++ - std::string 赋值时出现段错误

标签 c++ string memory

我有一个名为 Sample 的类,它包含一个类型为 std::string 的参数 value。 有一个公共(public)成员函数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 )

谁能建议我应该如何调试这个问题?

最佳答案

您显示的代码是正确的。所以错误是在别的地方。例如,它可能在较早的某个时间点发生堆栈或堆损坏,直到执行这些代码行后才被注意到。

关于c++ - std::string 赋值时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7455926/

相关文章:

ruby - 有没有办法将 Ruby 对象的人类可读表示转换回这个对象

c++ - 反转字符串 C++

c# - 如何将二进制转换为字符串?

c++ - 不占用物理内存的静态局部变量

c++ - 为什么我可以打印动态分配的对象而不是使用 cout << 在堆栈上创建的对象?

c - 为什么这个循环范围的一个小的、特别的变化会导致执行时间发生如此巨大的变化——从 15 毫秒到无穷大?

c++ - 如何显示以字母开头的结果,例如仅 A

c++ - Boost::geometry 查询返回索引

c++ - 正确关闭 while(cin.good()) 循环

java - YouTube 直播 : Record screen