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

标签 c++ memory segmentation-fault

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

相关文章:

c++ - 在 C++ 中操作成对 vector 的值之一

c - 解析链表时出现段错误

c++ - 如何在 C++ 中按字母顺序对标准输入字符串进行排序?

c - 在 C 中实现拼写检查器 : Valgrind reports memory errors

c - Linux 上的堆栈开始

python - tracemalloc的开销有多大?

c++ - 是否有用于使用 Cygwin GCC 编译的 C++ 程序的免费内存调试器?

无法弄清楚seg错误的原因是什么

c++ - 在循环 C 中使用 libcurl

c++ - 类与函数模板特化