百度百科 ZeroMemory

区别

ZeroMemory和memset的区别:

1、ZeroMemory是微软的SDK提供的,memset是属于C Run-time Library提供的。因此ZeroMemory只能用于Windows系统,而memset还可用于其他系统。
2、ZeroMemory是一个宏,只是用于把一段内存的内容置零,内部其实是用 memset实现的,而memset除了对内存进行清零操作,还可以将内存置成别的字符。
3、如果程序是Win32程序而且不想连接c运行时库,就用ZeroMemory;如果需要跨平台,就用memset。
所以,如果ZeroMemory和memset用于清零操作,其本质是一样的。

ZeroMemory和 “={0}”的区别:

1、ZeroMemory会将结构中所有字节置0,而“={0}”只会将成员置0,其中填充字节不变。
2、一个struct有构造函数或虚函数时,ZeroMemory可以编译通过,而“={0}”会产生编译错误。其中,“={0}”的编译错误起到了一定的保护作用,因为对一个有虚函数的对象使用ZeroMemory时,会将其虚函数的指针置0,这是非常危险的(调用虚函数时,空指针很可能引起程序崩溃)。

示例代码

struct SPerson
{char c;float s;};
class CTestVirtual
{public:
CTestVirtual(){}
/// 虚函数
virtual int Draw()
{return 10;}
int a;
};
int main(int argc, char* argv[])
{
char sztmp[20];
/// 安全操作
ZeroMemory(sztmp, sizeof(sztmp));
/// 安全操作
SPerson sTest = {0};
int i = sizeof(SPerson);
会引起编译错误!
//CTestVirtual otv = {0};
CTestVirtual tv;
/// 危险操作!
ZeroMemory(&tv, sizeof(tv));
/// 因为对象没有使用虚指针调用函数,所以程序运行到这里不会崩溃
tv.Draw();
/// 将对象地址赋给指针
CTestVirtual *pTv = &tv;
//虚函数的指针已经被清零,因此程序运行到这里会引起崩溃!
//错误信息:Unhandled exception at 0x004010b1 in Solution.exe:
//0xC0000005: Access violation reading location 0x00000000.
pTv->Draw();
return 0;
}
因此,在windows平台下,数组或纯结构使用ZeroMemory是安全的,而类(class)就使用构造函数进行初始化,不要调用ZeroMemory。
另外,如果一个类的结构中包含STL模板(Vector、List、Map等等),那么使用ZeroMemory对这个类的对象中进行清零操作也会引起一系列的崩溃问题(指针指向内存错误、迭代器越界访问等)。所以,再次强烈建议:类(class)只使用构造函数进行初始化,不要调用ZeroMemory进行清零操作。
在Windows编程中,ZeroMemory的作用是用0来填充一块内存区域,主要是你填充一些数据结构时把它们填为0比较保险,因为很多默认的参数取值为NULL,操作系统会替你解决。

ZeroMemory(百度百科 ZeroMemory)相关推荐

  1. 爬取百度百科上中国所有城市的信息

    1 # coding=utf-8 2 import xlrd 3 import xlwt 4 import requests 5 import re 6 import json 7 import os ...

  2. 使用CURL构建爬虫,抓取百度百科内容

    实现这个功能的步骤: 首先打开百度百科,在搜索框输入"php"关键词,得到搜索列表,一般都是10条: 然后使用火狐的Firebug分析百度列表的内容组成,主要是html标签,发现去 ...

  3. 姚殊清华计算机科学与技术,王道顺(清华大学计算机科学与技术系副教授)_百度百科...

    王道顺 (清华大学计算机科学与技术系副教授) 语音 编辑 锁定 讨论 上传视频 王道顺,毕业于四川大学理学博士 (应用数学),现为 清华大学计算机科学与技术系副教授. 中文名 王道顺毕业院校 职    ...

  4. python编程中文版百度百科_1.2 搭建python+pycharm编程开发环境

    工欲善其事必先利其器,很多小伙伴在学习编程的道路上,第一步就被编程环境搭建劝退.今天就让我们起来快速搭建一个python的开发环境,开启征服python的第一步. 一.Python安装 1.1pyth ...

  5. 【网络爬虫】BeautfulSoup爬百度百科(真の能看懂~!)

    文章目录 1 百度百科 2 观看规律 3 制作爬虫 4 结果 1 百度百科 百度百科中有很多名词的解释信息, 我们今天从 "网页爬虫" 的词条开始爬, 然后在页面中任意寻找下一个词 ...

  6. python爬虫百度百科-如何入门 Python 爬虫?

    目前网上有关网页爬虫的指导有很多,但是套路却是千篇一律,基本都是围绕以下内容进行展开,CSS/html等网页知识 requests或urllib BeautifulSoup或正则表达式 Seleniu ...

  7. python语言百度百科-Python 语言下数据驱动DDT的应用

    数据驱动测试的含义: 在百度百科上的解释是: 数据驱动测试,即黑盒测试(Black-box Testing),又称为功能测试,是把测试对象看作一个黑盒子.利用黑盒测试法进行动态测试时,需要测试软件产品 ...

  8. 用python 爬取百度百科内容-爬虫实战(一) 用Python爬取百度百科

    最近博主遇到这样一个需求:当用户输入一个词语时,返回这个词语的解释 我的第一个想法是做一个数据库,把常用的词语和词语的解释放到数据库里面,当用户查询时直接读取数据库结果 但是自己又没有心思做这样一个数 ...

  9. python爬虫百度百科-python爬虫(一)_爬虫原理和数据抓取

    本篇将开始介绍Python原理,更多内容请参考:Python学习指南 为什么要做爬虫 著名的革命家.思想家.政治家.战略家.社会改革的主要领导人物马云曾经在2015年提到由IT转到DT,何谓DT,DT ...

最新文章

  1. Kotlin let、with、run、apply、also函数的使用
  2. NSAttributedString 详解
  3. nodejs 打印返回的json
  4. ***解决方案的选择
  5. MyBatis传入多个参数的问题
  6. jQuery弹出层插件大全
  7. 大数据技术之 Kafka (第 1 章 Kafka 概述)
  8. 华为服务器euleros系统,euleros服务器版本
  9. Java中after注解_Spring(12):使用注解(@AfterThrowing/@After/@Around)实现AOP异常增强与实例...
  10. 记录第二次遇到ERROR! MySQL server PID file could not be found!
  11. ehcache常用API整理
  12. 专业营销手段汇编及研究
  13. 拓展练习--find查找、打包压缩、服务器、磁盘挂载
  14. python制作热力图_python绘制热力图
  15. 《神经科学:探索脑》学习笔记(第24章 学习和记忆的分子机制)
  16. 如何在家里制作服务器,在家如何架设服务器?
  17. 手机闪存速度测试工具,AndroBench
  18. [OHIF-Viewers]医疗数字阅片-医学影像-中间插播一下-es6-使用const加箭头函数声明函数相对于function声明函数有什么好处?...
  19. 安卓11添加第三方输入法替换默认输入法
  20. antd vue form 手动校验_Ant Design 4.0 的一些杂事儿 - Form 篇

热门文章

  1. 面试官通过21天步数考察候选人诚意,结果拒了清华生收了三本生
  2. 程序员能靠技术渡过中年危机吗?
  3. 干货丨常用JS前端开发框架有哪些?
  4. 给你一份详细的web前端CSS布局指南,请查收
  5. QT子文件的建立和调用
  6. maya为什么不能导出fbx_Maya在操作中最容易出现的几个问题,现在注意还来得及...
  7. STM32F103单片机读取芯片自身ID
  8. 值得收藏的Redis基础总结
  9. 反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)加入自己的思考(pytorch函数)(二)
  10. 安装caffe时出现“MySQL”不是内外不wenjian