c++ - 空与零内存

标签 c++ c winapi null directx

将对象设置为 NULL 和使用 ZeroMemory 之间到底有什么区别?

我听说在 WinAPI(主要是 C)中,一个人应该在 C 对象上使用 ZeroMemory 是一个很好的做法。我有 C# 背景,这似乎是一个 C++ 人真正应该知道的东西。

我发现使用 DirectX API,无论是否对对象进行 ZeroMemory,应用程序仍然可以工作,但有些样本使用 ZeroMemory 而有些则不。

谁能澄清这些事情?

最佳答案

ZeroMemory 用零填充一 block 内存。

将指针设置为 NULL 只会使指针指向任何内容,这不同于用零填充指针指向的内存(例如,您仍然可以通过该指针访问该内存)。

在您可以对该对象做任何有用的事情之前,您可能需要用更有意义的东西替换这些零 - 这就是为什么使用 ZeroMemory 的程序都可以工作或不工作的原因。

在这种情况下使用 ZeroMemory 的原因是您可以轻松找到在访问点未初始化的对象上的操作(例如,Visual Studio 正在用 0x0c0c0c0c< 填充未初始化的内存/* 或类似的 */,所以当你在调试过程中遇到这种模式时,你就知道这个对象还没有被初始化)。

关于c++ - 空与零内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16210598/

相关文章:

c++ - 模板类并将数组初始化为零

c - 在另一个静态结构中静态分配结构成员?

c - 如何使用 Windows API 创建文件?

c++ - 在 C++ 的受控环境中执行 Windows 命令

c++ - “安全”DLL 注入(inject)

c++ - 调试 .DLL 注入(inject)问题 - 假定执行代码未被命中的断点

c++ - 如何确定浮点值中小数点后的位数?

c++ - OS X 上 Eclipse 中的 OpenGL 和 GLUT

c++ - 注册 pjsip-app 示例错误

c++ - stdout 到变量 c/c++