文档章节

C++ ZeroMemory和memset

吃一堑消化不良
 吃一堑消化不良
发布于 2016/10/21 15:52
字数 491
阅读 76
收藏 0

一、memset

void *memset(void *s,int ch,size_t n); 

由C Run-time Library提供的提供的函数,作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。由于是语言层面提供,所以可跨平台使用。

参考:http://www.cplusplus.com/reference/cstring/memset/

示例:

char str[] = "almost every programmer should know memset!";  
memset (str,'-',6);  
puts (str);

输出:

------ every programmer should know memset!  

        memset是逐字节进行填充,所以s一般为char *型。对于其它类型的s,可以填充的值有两个,0和-1。这是因为计算机中用二进制补码表示数字,0和二进制补码为全0,-1的二进制补码为全1。

二、ZeroMemory

#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))  
#define ZeroMemory RtlZeroMemory  

由此可见:

  1. ZeroMemory实际是用memset实现的。
  2. ZeroMemory只能用于windows平台。

注意:

        ZeroMemory和memset且于清零时,会将结构中所有字节置0,如果结构体中有虚函数或结构体成员中有虚函数,则会将虚函数指针置0,如果后续程序调用虚函数,空指针很可能导致程序崩溃!

        因此,有虚函数或成员中有虚函数的结构体初始化,一定要用构造函数来完成。

        另外,如果一个类的结构中包含STL模板(Vector、List、Map等等),那么使用ZeroMemory对这个类的对象中进行清零操作也会引起一系列的崩溃问题(指针指向内存错误、迭代器越界访问等)。所以,再次强烈建议:类(class)只使用构造函数进行初始化,不要调用ZeroMemory进行清零操作。

本文转载自:http://blog.csdn.net/tjunxin/article/details/8540259

吃一堑消化不良
粉丝 28
博文 188
码字总数 112947
作品 0
浦东
程序员
私信 提问
[原]字典树处理单词集

引言:昨天写了一个简单的通过字典树来索引比较大的字母集合的程序。通过字典树,确实能够大大减少查询时间,是一种不错的字母表的匹配方案。这里我就拿出来分享一下。(ps:英文单词集大概有3...

长平狐
2012/11/14
60
0
C++:memset memcpy memmove的定义与区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BeerBread134/article/details/88606382 一般来说,如以下示例代码所示: 使用memset进行初始化 ,使用memcp...

陶晨毅
03/16
0
0
Android NDK 使用memcpy memset 等函数报错 解决办法

在开发 Android NDK 时发生了memcpy、memset 等函数报错的问题, 提示如下: Invalid arguments 'Candidates are:void memcpy(void , const void *, ?) 解决方案 右击项目工程properties ->......

yhjgood
2014/02/10
0
0
C/C++语言void及void指针

1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。 2.void的...

技术小阿哥
2017/11/26
0
0
C++11新特性(14)-将sizeof用于类成员

sizeof运算符 sizeof运算符返回表达式或者类型所占内存空间的字节数。它返回一个size_t类型的常量表达式。 假设有下面的结构体: struct Point3d{ int x; int y; int z; }; 可以这样进行初始...

面向对象思考
2018/06/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

10分钟详解Spring全家桶7大知识点

点关注,不迷路;持续更新Java架构相关技术及资讯热文!!! Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶。它包括SpringMVC、SpringBoot、Spring Cloud、Spr...

我最喜欢三大框架
19分钟前
4
0
注册服务

列出所有服务[root@localhost ~]# systemctl list-unit-files[root@localhost ~]# systemctl status mysqld[root@localhost ~]# systemctl stop mysqld[root@localhost ~]# ......

jxlgzwh
22分钟前
0
0
解决jdk8 stream tomap方法报错:java.lang.IllegalStateException: Duplicate key异常解决(key重复)

List<User> userList = User.ME.loadList(users); if (CollectionUtils.isNotEmpty(userList)) { Map<Long, User> userMap = userList.stream().filter(Objects::nonN......

冰峰雪座
31分钟前
0
0
jdk中的一些命令

jdk中的一些命令 jps jstack jmap jstat jhat jinfo javap http://www.importnew.com/18398.html

晨猫
32分钟前
0
0
Bystack的高TPS共识算法

共识算法是分布式系统保证节点数据状态一致性的方法,在区块链的共识算法分POW(工作量证明)和POS(权益证明)两大类。第一类POW模式是在公链项目中运用的最广泛应用的共识算法,比特币长达10年...

比原链Bytom
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部