C/C++ memset函数与类对象的使用安全

最近写代码的使用,有一个场景如下:

我定义了一个结构体,比如

struct abc{int a;std::string b;
}

然后我使用struct abc的时候,做了如下操作:

struct abc test;
memset(&test,0x00,sizeof(struct abc));
stra.b="sdfasdfa";

这段代码在编译的过程中是没有问题的,但是会在执行过程中报段错误
个人认为原因是包含在struct abc中的元素std::string b是一个类对象,在创建test这个结构体变量的时候它也被初始化为一个std::string对象,被赋予了std::string的特性,并在内存中存放了其作为std::string类对象的一些特性参数。" memset(&test,0x00,sizeof(struct abc)) " 这段代码会把对象test.b在内存中清零,test.b在内存中的数据(test.b的成员变量等等)遭到了破坏。之后再把"sdfasdfa"赋值给b时,实际尝试调用了string::operator=(),但对象b由于本身在内存中的初始数据被破坏,实质上已经失去了std::string的特性,无法调用原本属于std::string的成员函数,就会引发内存非法访问,发生段错误。

C/C++ memset函数与类对象的使用安全相关推荐

  1. c++11 bind直接绑定未初始化类的成员函数、类对象的operater()的方法与区别

    针对标题的两种情况,使用起来有一定的特殊性,特此记录下. 至于其他常规的bind使用方法,网上有很多文章有介绍,也可以看这篇文章. 标题的两种情况: 情况一: 这个例子用了两个知识: 第一,关于std ...

  2. c语言 memset 段错误,段错误之memset对类对象的误用

    1.问题描述 实际项目中,定义一个如下的基类和子类,均包含有虚函数. //基类 class OriginalTask { public: OriginalTask() {}; virtual ~Ori ...

  3. memset() 初始化类对象

    今天看到迅雷2014校招一道笔试题如下: [cpp] view plaincopy #include <iostream> using namespace std; class paren ...

  4. memset初始化类对象出错解析

    void *memset(void *s, int v, size_t n); 英文释义如下: Copies the value v (converted to type unsigned char) ...

  5. 段错误之 memset 对类对象的误用

    1.问题描述 实际项目中,定义一个如下的基类和子类,均包含有虚函数. //基类 class OriginalTask { public:OriginalTask() {};virtual ~Origi ...

  6. C++对象模型5——类对象的内存布局

    一.类对象的内存布局 1.1.单一继承的类对象布局 示例1 class base { public:int m_fai;int m_faj; }; class derive : public base ...

  7. C++对象模型1——类对象的sizeof、static成员、对象模型、this指针

    一.类对象的sizeof 1.空类对象的sizeof class test3{ };int main(int argc, char const *argv[]) { test3 t;cout<& ...

  8. C++类对象在内存中的布局

    目录 一.前言 二.C++ 类对象的内存布局 2.1 只有数据成员的对象 2.2 没有虚函数的对象 2.3 拥有仅一个虚函数的类对象 2.4 拥有多个虚函数的类对象 三.继承关系中的C++类对象内存分 ...

  9. C++对象模型探索 / 普通类对象占用的空间

    一.空类的大小 #include <iostream>class A{};int main() {A obja;std::cout << "obja 的地址:&quo ...

最新文章

  1. PyTorch 0.4新版本 升级指南 no_grad
  2. 36个创意广告海报欣赏
  3. 【Tools】cmake 常用变量和常用环境变量查表手册---整理
  4. SQL Server 创建用户及权限管理
  5. 话里话外:“按单制造”的业务特点(一)
  6. java 跳转action_JS 跳转到指定Action | 学步园
  7. asp2.0 GridView OnRowDataBound event
  8. 使用Rufus制作安装U盘报错,使用UltraISO成功
  9. 查询数据总数_Web | Django 与数据库交互,你需要知道的 9 个技巧
  10. Spyder设置字体
  11. 银行计算机岗社会招聘考什么题目,必知丨应聘银行技术岗,考试都考啥?
  12. 【Python报错】MemoryError
  13. PAT A 1034
  14. 0528班宋ww:回顾刚来的那一天还历历在目,不禁感概一番
  15. Mac下的winscp替代者 FileZilla
  16. 树莓派4B从开箱到连接电脑(超级小白)
  17. 超级计算机图片高清,专业不止一点,vivo X50 Pro+后置四摄,高清1亿模式亮点十足...
  18. Park和unPark方法
  19. PTA 7-32 说反话-加强版 (20分)
  20. 40G MPO布线方案

热门文章

  1. 微信公众号文章爬取下载各种格式
  2. 用HBuilder X编辑器打开的网页出现中文乱码
  3. filebrowser实现私有网盘
  4. MATLAB控制系统仿真与CAD
  5. 业务指标基础分析(excel)--python实现
  6. EPSON RX8010SJ RTC 调试笔记之五, 时钟及日历解析
  7. 技术债务研究综述X4
  8. android移动点餐系统内容和要求,基于Android云计算的移动点餐系统
  9. Splunk 常见问题解答
  10. Oracle 19c 新特性 —— 自动索引 Automatic indexing