C++典型内存错误 0xCDCDCDCD 0xDDDDDDDD 0xFEEEFEEE 0xCCCCCCCC 0xABABABAB

在进行C++开发时候,由于野指针、空指针、未初始化内存等原因,很容易导致内存错误,并报出特定错误码:
    0xCDCDCDCD - Created but not initialised 未初始化的堆内存
    0xDDDDDDDD - Deleted 引用的内存已经/对象被删除
    0xFEEEFEEE - Freed memory set by NT's heap manager 
    0xCCCCCCCC - Uninitialized locals in VC6 when you compile w/ /GZ 未初始化的栈内存
    0xABABABAB - Memory following a block allocated by LocalAlloc()
VC++Debug编译方式编译的程序中,会跟踪用new分配的内存
新分配的内存会用0xcd(助记词为Cleared Data)填充,防止未初始化;
当它被delete后,又会被0xdd(Dead   Data)填充,防止再次被使用。
这样有利于调试内存错误。之所以选这样的填充模式,是因为:
    1.大数,若被当成指针就会越界 
    2.奇数,指针通常指向偶数地址  
    3.0, 这样不会和   NULL   混淆。 
Release版中不会有这些字节填充

本文作者:vanxkr

本文链接:http://www.vanxkr.com/2019/9/cpp-error-ram

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0许可协议。转载请注明出处!

QMessageBox中文按钮最便捷实现
0 条评论
已登录,注销 取消