将所有值赋给结构体有什么意义吗?

时间:2016-07-07 22:27:35

标签: c++ c memory

我最近在试验SendInput并发现一切都按预期工作,而没有为结构分配其他值

#include <Windows.h>

int main(int argc, char *argv[]) {
    INPUT input;

    input.type = 1;
    input.ki.wVk = 0x41;

    SendInput(1, &input, sizeof(INPUT));

    return EXIT_SUCCESS;
}

如果您查看我正在使用的INPUT结构的MSDN定义,它有许多其他变量(typewVk除外,这是我唯一的变量设定)。

为该结构中的所有其他字段添加类似于input.ki.dwExtraInfo = 0;的内容是否有任何意义?我假设,默认情况下,当您分配结构时,它会将零写入内存,因此设置这些变量没有意义吗?

2 个答案:

答案 0 :(得分:3)

本地变量(以及本地结构变量的扩展成员)未初始化,因此尝试读取或写入它们会导致未定义的行为。

在这种情况下它恰好起作用,但你不能依赖它。

话虽这么说,这个结构的字段可能都是0,因为它是main函数的本地字段,进程的内存可能在它启动之前被清除,并且变量不会消失程序生命周期范围,因此它在堆栈上使用的空间不被其他任何东西使用。

但同样,这是一个不能依赖的实现细节。因此最好显式初始化所有值。

答案 1 :(得分:0)

您不必分配变量,但我认为更好的做法是实例化为0null,并在您get的过程中设置检查点这些变量。在我看来,它使你的代码更加健壮,因为你永远不会忘记忘记实例化的内容以及什么不是。

此外,默认情况下,如果未实例化某个值,则不会将其写入内存。