陈词滥调,正确使用memset
char data[10];
memset(data, 1, sizeof(data)); // right
memset(data, 0, sizeof(data)); // right
int data[10];
memset(data, 0, sizeof(data)); // right
memset(data, -1, sizeof(data)); // right
memset(data, 1, sizeof(data)); // wrong, data[x] would be 0x0101 instead of 1
struct Parameters {int x;int* p_x;
};
Parameters par;
par.p_x = new int[10];
memset(&par, 0, sizeof(par));
class BaseParameters
{
public:virtual void reset() {}
};class MyParameters : public BaseParameters
{
public: int data[3];int buf[3];
};MyParameters my_pars;
memset(&my_pars, 0, sizeof(my_pars));
BaseParameters* pars = &my_pars;//......MyParameters* my = dynamic_cast<MyParameters*>(pars);
原因事实上也非常easy发现,我们的目的是为了初始化数据结构MyParameters里的data和buf,正常来说须要初始化的内存空间是sizeof(int) * 3 * 2 = 24字节。可是使用memset直接初始化MyParameters类型的数据结构时。sizeof(my_pars)却是28字节,由于为了实现多态机制,C++对有虚函数的对象会包括一个指向虚函数表(V-Table)的指针,当使用memset时,会把该虚函数指针表也被初始化0,和dynamic_cast还可以使用RTTI技术,当用于执行V-Table,可在这个时候,由于V-Table该链接已被摧毁,导致程序异常。
陈词滥调,正确使用memset相关推荐
- 老生常谈,正确使用memset
前段项目中发现一个问题,程序总是在某个dynamic_cast进行动态转换时出异常,查了半天才发现问题原来是出在memset的使用上,虽然问题本身显而易见,但当处于几十万行代码量级中时,就变得不太那么 ...
- 【C++】memset函数
memset memset是计算机中C/C++语言初始化函数.作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作. 简单来说,就是将某一块内存的全部内容设置为指定的 ...
- C语言之memset函数的使用
转自:老生常谈,正确使用memset 本文归纳了下使用memset几个需要注意的地方,虽然内容很简单,但也希望对大家有所帮助. 1. memset是以字节为单位,初始化内存块. 当初始化一个字节单位的 ...
- memset的用法详解
文章目录 memset简介 需要说明的几个地方 一.不能任意赋值 二.注意所要赋值的数组的元素类型 关于所要赋值的字符数的写法 具体用法实例 总结 memset简介 memset是一个初始化函数,作用 ...
- L1-043 阅览室 (20 分)——memset补充
L1-043 阅览室 (20 分) 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为 ...
- 获取令牌密码_如何真正存储用户密码和api令牌(即密码)
获取令牌密码 A cliché in posts detailing password storage schemes is to finish by telling the syadmins and ...
- wenbao与acm技巧(必备知识)
推荐博客:http://blog.csdn.net/xueerfei008/article/details/19029797 http://blog.csdn.net/xueerfei008/a ...
- 【C/C++17】_ooci.h,_ooci.cpp,_mysql.h,_mysql.cpp,_postgresql.h,_postgresql.cpp
文章目录 1._ooci.h 2._ooci.cpp 3._mysql.h 4._mysql.cpp 5._postgresql.h 6._postgresql.cpp 1._ooci.h //con ...
- Unix编程/应用问答中文版(转)
Unix编程/应用问答中文版 名称 -- Unix编程/应用问答中文版 版本 -- 0.04 ( 2003-10-09 外发版 ) 维护 -- 小四 <scz@nsfocus.com> 主 ...
最新文章
- 《信息可视化:交互设计(原书第2版)》——第2章基本概念
- iTOP-4412开发板驱动lcd显卡以及linux开机log的修改方法
- 2008_10_28_星期二
- 串的模式匹配、KMP算法、nextval数组求法
- 计算机中丢失vcomp140.dll,Vcomp140.dll文件
- spring一站式开发_Spring开发人员知道的一件事
- 一名创业者浴火涅磐的自白——对话阿里云MVP孙琦
- 【李宏毅2020 ML/DL】P97-98 More about Meta Learning
- 数组之间的比较应当用Arrays.equals()
- 摩天大楼建造大跃进折射啥危机?
- eclipse svn Subversive
- 空间数据平台SDP - 医疗药品门店数字化营销
- 六月福师计算机应用基础在线作业,19春福师《计算机应用基础》在线作业一答案满分...
- POJ 6184 【三元环 +分治】
- linux中文件夹的作用
- JavaScript实现打字机效果
- vue+element_ui纯前端下载csv文件
- charles(抓包神器)
- SCADS简介及应用
- AutoCAD颜色索引表与RGB颜色的对照表