PROCESSENTRY32 .dwSize和sizeof

时间:2015-07-28 20:19:49

标签: c++ size byte

我阅读了这两个“功能”所做的事情,看起来它们是一样的,尽管它们不是

的dwSize:

“结构的大小,以字节为单位。”

的sizeof:

“sizeof(x)返回变量或类型x占用的内存量(以字节为单位)”

我的减速:

PROCESSENTRY32 entry;
cout >> entry.dwSize >> endl;
cout >> sizeof(entry) >> endl;

为什么entry.dwSize和sizeof(条目)不一样? 根据定义,entry.dwSize应该以字节为单位给出条目的大小 和sizeof(entry)应该以字节为单位给出条目的大小(这是结构,所以基本相同)

3 个答案:

答案 0 :(得分:0)

来自MSDN Documentation for PROCESSENTRY32

  

的dwSize
  结构的大小,以字节为单位。在调用Process32First函数之前,将此成员设置为sizeof(PROCESSENTRY32)。如果未初始化dwSize,则Process32First将失败。

所以dwSize应该等于sizeof(PROCESSENTRY32),但是创建struct不会初始化其成员,因此在设置它们之前,所有这些都会有垃圾。

答案 1 :(得分:0)

创建结构时,它可以使用0字节随机初始化。当您查看docs时,您会发现在使用之前必须自己填写dwSize。

答案 2 :(得分:0)

你混淆了两件完全无关的事情。 PROCESSENTRY32::dwSize应该初始化为收件人PROCESSENTRY32结构的大小的数据字段。您有责任将其设置为正确的值。它不会神奇地自我定位。

即。你应该做的

PROCESSENTRY32 entry;
entry.dwSize = sizeof entry;
...
在尝试将entry传递给任何WinAPI函数之前

dwSize是“结构的大小,以字节为单位”时,这就是doc的意思。