C/C++ memset函数与类对象的使用安全
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函数与类对象的使用安全相关推荐
- c++11 bind直接绑定未初始化类的成员函数、类对象的operater()的方法与区别
针对标题的两种情况,使用起来有一定的特殊性,特此记录下. 至于其他常规的bind使用方法,网上有很多文章有介绍,也可以看这篇文章. 标题的两种情况: 情况一: 这个例子用了两个知识: 第一,关于std ...
- c语言 memset 段错误,段错误之memset对类对象的误用
1.问题描述 实际项目中,定义一个如下的基类和子类,均包含有虚函数. //基类 class OriginalTask { public: OriginalTask() {}; virtual ~Ori ...
- memset() 初始化类对象
今天看到迅雷2014校招一道笔试题如下: [cpp] view plaincopy #include <iostream> using namespace std; class paren ...
- memset初始化类对象出错解析
void *memset(void *s, int v, size_t n); 英文释义如下: Copies the value v (converted to type unsigned char) ...
- 段错误之 memset 对类对象的误用
1.问题描述 实际项目中,定义一个如下的基类和子类,均包含有虚函数. //基类 class OriginalTask { public:OriginalTask() {};virtual ~Origi ...
- C++对象模型5——类对象的内存布局
一.类对象的内存布局 1.1.单一继承的类对象布局 示例1 class base { public:int m_fai;int m_faj; }; class derive : public base ...
- C++对象模型1——类对象的sizeof、static成员、对象模型、this指针
一.类对象的sizeof 1.空类对象的sizeof class test3{ };int main(int argc, char const *argv[]) { test3 t;cout<& ...
- C++类对象在内存中的布局
目录 一.前言 二.C++ 类对象的内存布局 2.1 只有数据成员的对象 2.2 没有虚函数的对象 2.3 拥有仅一个虚函数的类对象 2.4 拥有多个虚函数的类对象 三.继承关系中的C++类对象内存分 ...
- C++对象模型探索 / 普通类对象占用的空间
一.空类的大小 #include <iostream>class A{};int main() {A obja;std::cout << "obja 的地址:&quo ...
最新文章
- PyTorch 0.4新版本 升级指南 no_grad
- 36个创意广告海报欣赏
- 【Tools】cmake 常用变量和常用环境变量查表手册---整理
- SQL Server 创建用户及权限管理
- 话里话外:“按单制造”的业务特点(一)
- java 跳转action_JS 跳转到指定Action | 学步园
- asp2.0 GridView OnRowDataBound event
- 使用Rufus制作安装U盘报错,使用UltraISO成功
- 查询数据总数_Web | Django 与数据库交互,你需要知道的 9 个技巧
- Spyder设置字体
- 银行计算机岗社会招聘考什么题目,必知丨应聘银行技术岗,考试都考啥?
- 【Python报错】MemoryError
- PAT A 1034
- 0528班宋ww:回顾刚来的那一天还历历在目,不禁感概一番
- Mac下的winscp替代者 FileZilla
- 树莓派4B从开箱到连接电脑(超级小白)
- 超级计算机图片高清,专业不止一点,vivo X50 Pro+后置四摄,高清1亿模式亮点十足...
- Park和unPark方法
- PTA 7-32 说反话-加强版 (20分)
- 40G MPO布线方案