将对象设置为 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/