首页 > 解决方案 > 删除 memcpy 从字符串类复制的字符串时崩溃

问题描述

我新建了一个字符串类,然后通过 memcpy 将其复制到另一个字符串类,当我从另一个字符串类中删除它时它崩溃了。有人可以帮忙解释一下吗?谢谢


union Data {
    bool _bool;
    int16_t _int16;
    int32_t _int32;
    int64_t _int64;
    uint16_t _uint16;
    uint32_t _uint32;
    uint64_t _uint64;
    float _float;
    double _double;
    char s[sizeof(std::string)];
} ;

int main(int argc, char *argv[])
{
    Data d1;
    new(d1.s) std::string("123");

    Data d2;
    memcpy(d2.s, d1.s, sizeof(d1.s));

    void *p2 = d2.s;
    auto delStr2 = reinterpret_cast<std::string *>(p2);

    void *p1 = d1.s;
    auto delStr1 = reinterpret_cast<std::string *>(p1);

    delStr2->~basic_string();  //crashed

}

标签: c++

解决方案


std::string是一个不可复制的类型,复制它会memcpy导致未定义的行为。


推荐阅读