C++开发典型内存错误0xCDCDCDCD, 0xDDDDDDDD, 0xFEEEFEEE, 0xCCCCCCCC, 0xABABABAB总结

释放双眼,带上耳机,听听看~!

在进行C++开发时候,由于野指针、空指针、未初始化内存等原因,很容易导致内存错误,并报出特定错误码。

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

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版中不会有这些字节填充。

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C++调用Python

2022-1-11 12:36:11

安全经验

堆和栈的区别

2021-11-28 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索