首页 > 编程知识 正文

fseek函数的用法,stepseq函数是什么意思

时间:2023-05-04 15:20:24 阅读:108590 作者:2794

ZeroMemory函数的使用和注意事项ZeroMemory :角色: ZeroMemory是一种计算机函数,是美国微软软件包SDK中的宏。

其作用是用0填充内存区域。

声明:

void zero存储器(pvoid destination,SIZE_T Length );

参数:

Destination:是要用0填充的内存区域的开始地址。

Length:计算用0填充的内存区域的大小(以字节为单位)。

返回值:无

角色: ZeroMemory只是将指定的内存块清零。 使用结构前清零,不出让结构成员数

值有不确定性,是个好的编程习惯

注意:为了避免优化编译器的意外影响,请使用SecureZeroMemory函数。

此函数被定义为RtlZeroMemory宏。

详见Winbase.h和Winnt.h的首字母缩写

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。 (调用虚函数时,空指针很可能会导致程序崩溃。

示例:

# include ' STD afx.h ' # includeiostreamusingnamespacestd; struct SPerson{char c; float s; (; classctestvirtual { public : CT est virtual (} { }//虚函数virtual int Draw ) {return 10; (}int a; (; intmain(intargc,char* argv[] ) {char sztmp[20]; //zeromemory(SZtmp,sizeof ) SZtmp )安全操作; SPerson sTest={ 0 }; intI=sizeof(sPerson ); //引起编译错误! //CTestVirtual otv={0}; CTestVirtual tv; //危险的操作! zeromemory(TV,sizeof ) TV ); //对象没有使用虚拟指针调用函数,因此即使运行了此程序,也不会调用tv.Draw (); //指针CTestVirtual *pTv=tv分配对象地址; //虚函数的指针被清零了,执行到这里就会引起崩溃! //错误消息: unhandledexceptionat0x 004010 B1 in solution.exe ://0xc 00000053360 accessviolationreadinglocation0x 00000000 . }因此,在windows平台上,数组或纯结构使用ZeroMemory是安全的,类(class )是使用构造函数初始化的,不应调用ZeroMemory。

此外,如果某个类的结构包含STL模板(Vector、List、Map等),则使用ZeroMemory执行将此类的对象清零的操作会导致一系列崩溃问题(指针内存错误) 因此,我们再次强烈建议您仅使用构造函数初始化类(class ),而不要调用ZeroMemory进行清零操作。

在Windows编程中,ZeroMemory用作用0填充内存区域。 主要是,在填充一些数据结构时用0填充比较安全。 因为大多数缺省参数都为NULL值,操作系统会对其进行解析。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。