问题描述:
今天在写代码时遇到一个问题:将定义的一个含有string类型的结构体使用memset进行初始化。发现初始化之后的结构体不可以使用了。
问题解决:(链接)

  • memset初始化std::string对象时,按字节顺序将std::string对象所在空间清零,破坏了std::string对象的成员结构,使Myroxy指针资源变为野指针,操作其迭代器会出现不可预知的异常,在存储字符串时可能分配了不必要的内存空间,并且还导致这些内存不能被释放。
    (百度百科)
  • string不能使用baimemset或者memcpy这些低级函数。如果正好工作,那是你比较幸运。c++规定,除了daotrivially copyable类型可以使用memcpy函数外,其他类型是未定义行为。你new完后string的构造函数已经调用完毕,你再memset就破坏了他的内部数据不变式。
  • 用好这些概念就需要很多经验,一旦你接触到实际项目,那么这些这些用法才会更加清晰。 不是对所有类不能用,而是只能对于简单的类使用,比如POD(Plain old data),即兼容的C的结构体。c++有构造函数,构造函数用于执行初始化,建立不变式。而析构函数用来销毁对象。memcopy的话,对于没有拷贝构造函数的可以使用(具体还有很多限制,可以搜索trivially copyable type)。 简而言之就是,因为memset这种低级函数绕过了封装,可能会触发意想不到的行为。
    (链接)
  • string类型不能用memset,否则memset会破坏string本身的结构,导致在之后对string对象进行操作时,会引发内存分配的动作, 而这实际上是不应该发生的(应该直接使用string本身的内存而不是新申请内存块),分配的内存没有释放, 这样做的结果是会导致内存泄露。

问题记录_初始化带有string的结构体相关推荐

  1. 【C 语言】结构体 ( 结构体类型变量初始化 | 定义变量时进行初始化 | 定义隐式结构体时声明变量并初始化 | 定义普通结构体时声明变量并初始化 )

    文章目录 一.结构体类型变量初始化 1.定义变量时进行初始化 2.定义普通结构体时声明变量并初始化 3.定义隐式结构体时声明变量并初始化 二.完整代码示例 一.结构体类型变量初始化 1.定义变量时进行 ...

  2. c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配

    #include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...

  3. c++ 结构体初始化_单片机C语言 - 基于结构体的面向对象编程技巧

    单片机C语言 - 基于结构体的面向对象编程技巧 一.面向对象 面向对象是软件开发方法,是相对于面向过程来讲的.通过把数据与方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式 ...

  4. go结构体初始化_go嵌套匿名结构体的初始化详解

    go匿名结构体 嵌套匿名结构体的 示例代码片. type debugConfig struct { MaxQueueDepth int `json:"maxQueueDepth"` ...

  5. c语言中 定义结构体变量初始化,c++中的结构体:声明 定义 初始化

    什么是结构体? 之前的学习中我们知道了数组是一个容器,而且是存放固定大小数据的容器,而且存放的元素的数据类型必须要一致. 比如数据库中有这样的一条记录学号 性别 年龄 成绩 地址应该怎样存放 结构体: ...

  6. linux c语言结构体初始化,Linux c中 结构体初始化方式

    某日在看Linux底层驱动的介绍时,发现在Linux C中结构体的有多种初始化方式,这激起了我的好奇心,亲自实践,今日便来总结一下. 首先定义一个结构体:struct test{ int a; cha ...

  7. golang 初始化并赋值_golang 结构体初始化时赋值格式介绍

    golang在给结构体赋值初始值时,用:分割k,v值 x := ItemLog{ Id: GetUuid(), ItemId: u.Id, UsrId: "123", Name: ...

  8. java解析c的结构体_解析C语言中结构体struct的对齐问题

    首先看一下结构体对齐的三个概念值: 数据类型的默认对齐值(自身对齐): 1.基本数据类型:为指定平台上基本类型的长度.如在32位机器中,char对齐值为1,short为2,int,float为4,do ...

  9. c++ 结构体初始化_【干货】c语言基础语法——结构体

    1.关于C语言结构体的引入 学习环境搭建1_Linux C语言_嵌入式开发工程师-创客学院​www.makeru.com.cn 在实际问题中有时候我们需要几种数据类型一起来修饰某个变量. 例如一个学生 ...

最新文章

  1. .NET Core 配置Configuration杂谈
  2. Linux自学日记1
  3. ConfigParser 模块
  4. Mac 神兵利器(三) 使用Intellij IDEA打造全栈IDE
  5. ~~染色法判别二分图
  6. C语言栈的面试题,[面试题]EMC易安信-C语言函数堆栈的思考
  7. 删除进程 linux,linux批量删除进程
  8. nmap扫描常用命令
  9. CDH5 安装需求和相关软件支持的版本信息
  10. 统计学基础--假设检验
  11. 记自己开发的淘宝客优惠券
  12. 4-3 Vue的`:style`用法
  13. 计算机正在获取ip,电脑频繁显示网络电缆已拔出和正在获取IP怎么办
  14. Ubuntu18.04配置YCM
  15. Gradle 下载及代理设置
  16. SAP SE38代码大小写设定
  17. 15+ Javascript 中的数组方法
  18. [转载] 细看名字服务中心
  19. 解决Win10桌面图标/开始菜单磁贴图标变成白色的问题
  20. 高中计算机教室标语,高中班级教室励志标语

热门文章

  1. 移动硬盘拒绝访问找到数据的法子
  2. nginx匹配规则说明以及匹配的优先级
  3. Sublime Text 3 快捷键及使用技巧
  4. OPENSSL编程 第二十章 椭圆曲线
  5. 【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历
  6. 结构体数组(C++)
  7. 如何让 MSN 与应用系统紧密集成起来?
  8. nginx.conf文件详解
  9. python自动化_day4_迭代器生成器内置函数和匿名函数
  10. SQL2008R2 收缩数据库问题 - 日志文件不变小