Linux c++ 试验-5 double free问题
如果结构体中有string,不能使用memcpy,不然会有double free问题,可以使用std::move
#include <cstring> #include <cstdio> #include <iostream> #include <iostream> #include <tuple> #include <memory> struct teststdmov { std::string str1; std::string str2; }; int main() { using namespace std; teststdmov t1; teststdmov t2; t1.str1="aaaa"; t1.str2="bbbb"; t2=std::move(t1); printf("%s\n",t2.str1.c_str()); printf("%s\n",t2.str2.c_str()); }
需要注意的是std::mov只能移动std::string之类的数据,不能用于基本类型(类似copy)
#include <cstring> #include <cstdio> #include <iostream> #include <iostream> #include <tuple> #include <memory> struct teststdmov { std::string str1; std::string str2; char str3[50]; int a; }; int main() { using namespace std; teststdmov t1; teststdmov t2; t1.str1="aaaa"; t1.str2="bbbb"; sprintf(t1.str3,"ccc"); t1.a=100; t2=std::move(t1); printf("t1str1:%s\n",t1.str1.c_str()); printf("t1str2:%s\n",t1.str2.c_str()); printf("t1str3:%s\n",t1.str3); printf("t1a:%d\n",t1.a); printf("t2str1:%s\n",t2.str1.c_str()); printf("t2str2:%s\n",t2.str2.c_str()); printf("t2str3:%s\n",t2.str3); t1.a=200; printf("t2a:%d\n",t2.a); }
输出结果
t1str1: t1str2: t1str3:ccc t1a:100 t2str1:aaaa t2str2:bbbb t2str3:ccc t2a:100 [Finished in 3.1s]
std::mov是基于右值引用优化的
本博客是个人工作中记录,更深层次的问题可以提供有偿技术支持。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2019-06-20 AntDesign vue学习笔记(一)初始化项目
2018-06-20 asp.net网页注释