小编典典

Visual Studio C++ 和 Windows 中的调试内存填充模式是什么?

all

在 Visual Studio 中,我们都有过“baadf00d”,在运行时检查 C++ 调试器中的变量时见过“CC”和“CD”。

据我了解,“CC”处于调试模式仅表示内存何时被 new() 或 alloc() 和未初始化。而“CD”代表删除或释放的内存。我只在 RELEASE
版本中看到过“baadf00d”(但我可能错了)。

有时,我们会遇到处理内存泄漏、缓冲区溢出等情况,这些信息会派上用场。

有人愿意指出何时以及以何种模式将内存设置为可识别的字节模式以进行调试?


阅读 91

收藏
2022-06-04

共1个答案

小编典典

此链接有更多信息:

https://en.wikipedia.org/wiki/Magic_number_(programming)#Debug_values

* 0xABABABAB : Microsoft 的 HeapAlloc() 用于在分配堆内存后标记“无人区”保护字节
* 0xABADCAFE : 启动此值以初始化所有空闲内存以捕获错误指针
* 0xBAADF00D : 被微软的 LocalAlloc(LMEM_FIXED) 用来标记未初始化的分配堆内存
* 0xBADCAB1E : 与调试器的连接断开时返回到 Microsoft eVC 调试器的错误代码
* 0xBEEFCACE:被 Microsoft .NET 用作资源文件中的幻数
* 0xCCCCCCCC : 被微软的 C++ 调试运行时库用来标记未初始化的堆栈内存
* 0xCDCDCDCD : 被微软的 C++ 调试运行时库用来标记未初始化的堆内存
* 0xDDDDDDDD : 被微软的 C++ 调试堆用来标记释放的堆内存
* 0xDEADDEAD:用户手动启动崩溃时使用的 Microsoft Windows STOP 错误代码。
* 0xFDFDFDFD : 被微软的 C++ 调试堆用来标记分配堆内存前后的“无人区”保护字节
* 0xFEEEFEEE:被微软的 HeapFree() 用来标记释放的堆内存
2022-06-04