Delete calls memset?

Delete calls memset?

本文关键字:memset calls Delete      更新时间:2023-10-16

为什么在delete this;之后的调用堆栈中调用以下函数?

msvcr110d.dll!_VEC_memset(void * dst, int val, int len) 

请考虑operator delete没有过载。

在Microsoft C/C++运行库的调试版本中,delete使用memset将释放的内存设置为0xDD。这就是您在调用堆栈中看到memset的原因。您不会在发布版本中看到它
同样地,当通过new分配存储器时,新分配的存储器被设置为0xCD

你可以在这里看到一些细节-https://msdn.microsoft.com/en-us/library/974tc9t1.aspx

可能是在调试模式下工作。在这种情况下,如果有人一直在读取一个释放的块,通常会填充释放的区域以尽早检测。

此外,当稍后重用块时,可以检测是否有人在删除某个区域后对其进行了写入