本文目录
- 请教ZeroMemory()函数
- ZeroMemory函数怎么用
- 100分求助,fillchar 和 zeromemory 的区别
- ZeroMemory,memset 和“=” 三者用于清零操作的区别
- char与TCHAR、zeromemory的疑问
- ZeroMemory是做什么用
- 如何检测内存泄漏的位置/类构造函数内谨慎使用ZeroMemory函数
请教ZeroMemory()函数
The ZeroMemory function fills a block of memory with zeros.
VOID ZeroMemory(
PVOID Destination, // memory block
SIZE_T Length // size of memory block
);
Parameters
Destination
[in] Pointer to the starting address of the block of memory to fill with zeros.
Length
[in] Size, in bytes, of the block of memory to fill with zeros.
上面是MSDN中的解释,就是说这个函数实现的功能是将Destination制定的内存地址开始,Length字节长度的内存数据清零。
ZeroMemory函数怎么用
声明
void ZeroMemory( PVOID Destination,SIZE_T Length );
参数
Destination :指向一块准备用0来填充的内存区域的开始地址。
Length :准备用0来填充的内存区域的大小,按字节来计算。
返回值
无
作用
ZeroMemory只是将指定的内存块清零。
使用结构前清零,而不让结构的成员数值具有不确定性,是一个好的编程习惯。
100分求助,fillchar 和 zeromemory 的区别
1.ZeroMemory
The ZeroMemory function fills a block of memory with zeros.
VOID ZeroMemory(
PVOID Destination,
// address of block to fill with zeros
DWORD Length // size, in bytes, of block to fill with zeros
);
// 函数原形... destination 被转换为指向VOID类型的指针《传入的参数本身就是指针,只不过不是指向VOID的》
ZeroMemory(p, 100) = FillChar(p, 100, 0);
不过FillChar可以初始化 memory的值为非0值 这是ZeroMemory做不到的
FillChar的 实现代码
procedure _FillChar(var Dest; count: Integer; Value: Char);
{$IFDEF PUREPASCAL}
var
I: Integer;
P: PChar;
begin
P := PChar(@Dest);
for I := count-1 downto 0 do
P[I] := Value;
end;
ps. C中没有 reference的哦 只有C++中才有
2. FillChar(X, 1400, #0);
的意思是:找到 X 起始地址,然后从该地址处连续写 1400 个字节的 0 于是: FillChar(PTemp, 1400, #0); 自然会将 PTemp 这个指针所在的内存区域
-em
ZeroMemory,memset 和“=” 三者用于清零操作的区别
看编译器的,
对于绝大多数编译器来讲,
char namekey=““;
与
memset(namekey,0x0,sizeof(namekey));
或memset(namekey,’\0’,sizeof(namekey));
这三个是一样的。
但是有的编译器,
char namekey=““;只将namekey给赋值为’\0’,其他成员还是随机值,也就是未初始化的值
memset(namekey,0x0,sizeof(namekey));
和memset(namekey,’\0’,sizeof(namekey));
这两个肯定是一样的
-函数
char与TCHAR、zeromemory的疑问
#ifdef UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif
多查查MSDN,虽然是英文的,但强迫自己去看
C语言下的memset函数知道吗?zeromemory内部就调用了这个函数
一般在你定义一个数组之后,使用之前可以zeromemory一下,主要目的就是在里面写入个0当字符串结尾
一般加sz
-em
ZeroMemory是做什么用
Windows在给你的变量分配内存的时候,只是划定一块内存区域给变量,由于物理内存是操作系统里面所有进程共享的资源,所以分配的内存区域有可能刚刚被其他程序释放掉--而这些程序写入到那一段内存的数据还没有被清空,因此如果你不用ZeroMemory将刚刚分配的内存清零的话,读取一段被其他程序写入的数据对你的程序而言是一堆垃圾,这就是为什么有的时候会出现AccessViolation的原因。
就好比你去一个很忙的餐厅吃饭,服务员把你领到一个桌子前,这个桌子需要被擦干净你才能用一样,ZeroMemory就相当于擦桌子。
简单的,比如说VC内建类型,int, double,
char之类的,不需要用ZeroMemory。
一般来说,分配结构体变量,都需要使用ZeroMemory
这个函数主要是用来给Windows的API传递结构参数用的。因为windows的API内部参数检测机制比较严格,没有用的参数必须要设为零。结构中的参数很多,一个一个设比较麻烦,所以调用这个函数会方便一些。
-函数
如何检测内存泄漏的位置/类构造函数内谨慎使用ZeroMemory函数
我在实现过程中,也有点拿不稳,特别是用队列或栈来存储树的结点(也是指针)时,为了确保没问题,特别是内存的分配,我搜索并安装了Virtual Leak Detector,一个开源的内存泄漏检测工具