gpt4 book ai didi

c++ - 为什么此代码会出现段错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:15:27 27 4
gpt4 key购买 nike

下面的代码片段在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com