c++ - 删除 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
}
解决方案
std::string
是一个不可复制的类型,复制它会memcpy
导致未定义的行为。
推荐阅读
- c# - 如何使用 xamarin android 打开前置摄像头
- python - 试图抓取用户所属的所有组,但我没有正确查询
- php - 在 mysql 准备好之前在 div 中加载 php 页面而不加载 div
- windows - Hyperv/Windows10 - 创建机器时出错:机器创建期间驱动程序出错:退出状态
- java - MyBatis 调用带有返回值和输出参数的存储函数
- javascript - Javascript数学正在加入而不是添加
- r - 如何强制 data.table 将输入视为值,而不是列名?
- javascript - Redux 操作返回未定义
- java - java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableMap 在 Java Selenium 中使用带有 Maven 依赖关系的 WebDriver
- phpunit - phpstorm 问题中的 phpunit - 致命错误:找不到类“PHPUnit_Framework_TestCase”