老生常谈,正确使用memset
前段项目中发现一个问题,程序总是在某个dynamic_cast进行动态转换时出异常,查了半天才发现问题原来是出在memset的使用上,虽然问题本身显而易见,但当处于几十万行代码量级中时,就变得不太那么容易定位了。
- char data[10];
- memset(data, 1, sizeof(data)); // right
- memset(data, 0, sizeof(data)); // right
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
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));
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);
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);
老生常谈,正确使用memset相关推荐
- 陈词滥调,正确使用memset
前项目发现一个问题,计划永远是一个dynamic_cast当一个异常动态转换,搜索了半天才发现问题竟然是在memset使用,见.但当处于几十万行代码量级中时,就变得不太那么easy定位了. 本文归纳了 ...
- C语言之memset函数的使用
转自:老生常谈,正确使用memset 本文归纳了下使用memset几个需要注意的地方,虽然内容很简单,但也希望对大家有所帮助. 1. memset是以字节为单位,初始化内存块. 当初始化一个字节单位的 ...
- 【C++】memset函数
memset memset是计算机中C/C++语言初始化函数.作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作. 简单来说,就是将某一块内存的全部内容设置为指定的 ...
- memset的用法详解
文章目录 memset简介 需要说明的几个地方 一.不能任意赋值 二.注意所要赋值的数组的元素类型 关于所要赋值的字符数的写法 具体用法实例 总结 memset简介 memset是一个初始化函数,作用 ...
- L1-043 阅览室 (20 分)——memset补充
L1-043 阅览室 (20 分) 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为 ...
- 【牛客网】C/C++牛客网专项刷题(02)
以下为牛客网C/C++专项刷题: 1.虚函数不可以内联,因为虚函数是在运行期的时候确定具体调用的函数,内联是在编译期的时候进行代码展开,两者冲突,所以没有一起使用的做法. 2.C++中构造函数和析构函 ...
- 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> 主 ...
最新文章
- 卷积学习与图像识别的技术发展
- 独家 | 在R中使用LIME解释机器学习模型
- java开发中遇到的问题及解决方法(持续更新)
- 《cloud+》如果百度云飘走了你该怎么办?
- 洛谷P1083 [NOIP2012提高组Day2T2]借教室
- 瑞数动态安全:做一个牵着黑客鼻子走的移动靶心
- ubuntu pip 安装
- 连续 4 年成为“开发者最喜欢的语言”,这门编程语言你了解过吗?
- hive 修改分桶数 分桶表_疯狂Hive之DDL操作二(三)
- Cognos8.3解决方案
- 书单丨724运维日,为运维人干杯
- 基于Go Packet实现网络数据包的捕获与分析
- vb.net 教程 1-20 例
- 工业相机镜头选型教程
- LM317稳压芯片在工程中的应用
- Tomcat开启APR运行模式,优化并发性能
- TFTPD32无法传输
- 从蚂蚁金服的BI和大数据团队建设,看透BI发展,再不懂就落伍了
- 一台电脑借助另一台电脑实现上网
- 创建简单的Nape刚体
热门文章
- 排队问题解题思路_三大策略、5个技巧,完美解决超市收银排队难题
- tensorflow saver_TensorFlow: Model Persistence
- java有向图邻接表入度_图的实现--邻接表(求出各顶点的出度和入度)
- u盘复制不进去东西_禁止U盘拷贝,再也不让别人复制你电脑里的东西了!
- poj3253 优先队列
- 【模板】AC自动机(简单版)
- 后端python基础
- 第二十五篇 hashlib模块(* *)
- Python股票分析系列——基础股票数据操作(二).p4
- NOI2013矩阵游戏