VC++ 野指针,空指针等内存问题错误码

最近使用 VS 开发 c++ 的 dll ,发现 vc++ 对野指针空指针未初始化内存等导致的内存错误报有特定错误码:0xCDCDCDCD, 0xDDDDDDDD, 0xFEEEFEEE, 0xCCCCCCCC, 0xABABABAB

Google上对上述错误码的解释如下:

  1. 0xCDCDCDCD - Created but not initialised 未初始化的堆内存
  2. 0xDDDDDDDD - Deleted 引用的内存已经/对象被删除
  3. 0xFEEEFEEE - Freed memory set by NT's heap manager
  4. 0xCCCCCCCC - Uninitialized locals in VC6 when you compile w/ /GZ 未初始化的栈内存
  5. 0xABABABAB - Memory following a block allocated by LocalAlloc()

原理

VC++ 在 Debug 方式编译的程序中,会跟踪用 new 分配的内存。新分配的内存会用 0xcd(Cleared Data)填充,防止未初始化。当它被 delete 后,又会被 0xdd (Dead Data)填充,防止再次被使用。这样有利于调试内存错误。之所以选这样的填充模式,是因为:

  1. 大数,若被当成指针就会越界
  2. 奇数,指针通常指向偶数地址
  3. 非0, 这样不会和 NULL 混淆。

Release版中不会有这些字节填充

你可能感兴趣的:(VC++ 野指针,空指针等内存问题错误码)