将对象设置为NULL和使用ZeroMemory之间到底有什么区别?我听说在WinAPI(主要是C)中,一个人应该在C对象上使用ZeroMemory是一个很好的做法。我有C#背景,这似乎是一个C++人真正应该知道的东西。我发现使用DirectXAPI,无论是否对对象进行ZeroMemory,应用程序仍然可以工作,但有些样本使用ZeroMemory而有些则不。谁能澄清这些事情? 最佳答案 ZeroMemory用零填充一block内存。将指针设置为NULL只会使指针指向任何内容,这不同于用零填充指针指向的内存(例如,您仍然可以通过该指针访
ThisMSNDarticle说SecureZeroMemory()适用于在内存中存储了一段时间的敏感数据应该确保在不再需要时尽快覆盖的情况。thisSOquestion的答案解释为什么这会有所作为。现在使用SecureZeroMemory()来初始化每个内存块有什么意义吗?例如,在一个项目中,我看到如下代码:ICONINFOii;::SecureZeroMemory(&ii,sizeof(ICONINFO));if(::GetIconInfo(hIcon,&ii)){//dostuff,then//releasebitmapsif(ii.hbmMask)::DeleteObject(
在Win32编程中使用了一些POD结构。这些结构通常需要在使用前清零。这可以通过调用memset()/ZeroMemory()来完成STRUCTtheStruct;ZeroMemory(&theStruct,sizeof(theStruct));或按值初始化:STRUCTtheStruct={};虽然thetwovariantsabovearenotequivalentingeneral:以不同的方式处理填充区别对待非POD成员变量如果是在Win32中使用的POD结构,它们看起来是等效的。在任何情况下应该使用memset()/ZeroMemory()而不是Win32POD结构的值初始化
当C标准库中已有memset及相关调用时,为什么WindowsAPI中还存在ZeroMemory()等类似调用?我应该调用哪些?我猜答案是“取决于”。靠什么? 最佳答案 在C和C++中,ZeroMemory()和memset()是完全一样的。/*Inwinnt.h*/#defineRtlZeroMemory(Destination,Length)memset((Destination),0,(Length))/*Inwinbase.h*/#defineZeroMemoryRtlZeroMemory那为什么要使用ZeroMemory(
当C标准库中已有memset及相关调用时,为什么WindowsAPI中还存在ZeroMemory()等类似调用?我应该调用哪些?我猜答案是“取决于”。靠什么? 最佳答案 在C和C++中,ZeroMemory()和memset()是完全一样的。/*Inwinnt.h*/#defineRtlZeroMemory(Destination,Length)memset((Destination),0,(Length))/*Inwinbase.h*/#defineZeroMemoryRtlZeroMemory那为什么要使用ZeroMemory(