老生常谈,正确使用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> 主 ...
最新文章
- Nature-2012-拟南芥根系微生物组的结构
- Word中的字体大小
- 农行笔试,直接寄了,经验总结
- 复合索引字段的排序对搜素的影响
- golang 筆記:make 與 new 的差別
- cocos3 动作回调函数
- 安笙机器人_张翰新戏搭档徐璐!包贝尔要和辛芷蕾演奇幻电影?
- Linux运维 第三阶段 (一) 网络配置及openssl加密
- 银行岗位的“香饽饽”—金融科技岗
- 3DMax教程: 3DMax快捷键与界面操作!
- Digispark ATtiny85 单片机点灯大师之圣诞节彩灯Merry Christmas
- sftp工具都有哪些_自媒体都有哪些做图神器?自媒体人常用的工具
- STM32使用FreeRTOS CLI
- 【乱七八糟的笔记】——前缀树
- python实验过程心得体会_python学习心得
- unity 点击UI显示3D爆炸特效
- Qt之标签和单行文本编辑框(QLabel、QLineEdit)
- 公司里的技术总监CTO,天天都在干些啥?
- 我的博客开通啦,以后会记录一位IT女的学习生涯
- iOS开发——MRC(手动内存管理)
热门文章
- 大学有哪些专业python_python就业方向有哪些?
- python绘制指数函数图像及性质_指数函数图像及其性质正式版
- linux合并两个文件 去重复,c - 在Linux中使用C,通过系统调用将两个文本文件合并为一个新文件(来回换行) - 堆栈内存溢出...
- bilibili有电脑版吗_电脑版和平精英你期待吗?可惜国内并未上线
- python居中对齐代码end_Python tkinter.END属性代码示例
- BZOJ 1800 [Ahoi2009]fly 飞行棋
- MySQL之最基本命令
- windows主机网络信息获取程序设计
- css 实现页面加载中等待效果
- sublimeformaya