下面的代码片段在 linux 上运行,它报告段错误(核心转储)。我发现调用析构函数时会发生错误,但无法弄清楚原因。谁能帮忙解释一下?
class TStringPair{
public:
TStringPair(){
memset(this, 0, sizeof(TStringPair));
}
string a;
string b;
};
int main (int argc, char* argv[])
{
TStringPair test;
return 0;
}
最佳答案
那个memset
确实毁了你的类(class)。 std::string
(以及许多其他 C++ 类)的内存不应该用零填充,但您可以同时填充两个。
为了说明为什么这是个坏主意,请考虑一个具有指向实际字符的指针的 std::string
。哎呀,它现在指向 0,而不是指向空字符串。将非 C 对象归零还有其他原因是不好的,但它们与此示例不太相关。
我想象删除 memset
并且不在其位置放置任何内容会给出您想要的确切结果。
关于c++ - 为什么此代码会出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19340930/