你什么时候在C++中使用ZeroMemory结构?

pgh*_*ari 3 c++ memory struct zero

我已经看过使用ZeroMemory的示例(主要是使用windows和directx结构),但有时却没有使用它.我什么时候应该ZeroMemory结构?

Ton*_*roy 5

您几乎不应该在 C++ 中执行此操作,除非您正在编程的某些外部 API 要求您这样做(这可能适用于旧的 Windows C API)。有多种方法可以使用默认构造函数来初始化数据,这样,如果内存房屋的数据类型发生更改,构造将自动调整。使用ZeroMemory来初始化数据是脆弱的。

有趣的是,微软提到这在本文档ZeroMemory中甚至可能不适用于:SecureZeroMemory

ZeroMemory当您想要确保数据将被立即覆盖时,请使用此函数,因为某些 C++ 编译器可以ZeroMemory通过完全删除它来优化调用。


max*_*dev 5

ZeroMemory简单地用0填充结构的内存,这本质上意味着结构的每个值都设置为0.如果在将结构的所有值都传递给自定义值之前将其设置为例如API函数,则这是必要的. .在创建结构时,每个字段中都有未指定的值 - 这会导致函数中的未定义行为,然后访问结构的字段.