VC中关于 0xcccccccc和 0xcdcdcdcd异常

        VC在调试时,可能会报“写入位置0xcccccccc 时发生访问冲突”,或者“写入位置0xcdcdcdcd 时发生访问冲突”,这些问题可能是由于使用了未初始化的指针引起的。

        在 Debug 模式下,VC 会把未初始化的栈内存上的指针全部填成 0xcccccccc ,当字符串看就是 “烫烫烫烫……”,会把未初始化的堆内存上的指针全部填成 0xcdcdcdcd,当字符串看就是 “屯屯屯屯……”。那么调试器为什么要这么做呢?

        VC的DEBUG版会把未初始化的指针自动初始化为0xcccccccc或0xcdcdcdcd,而不是就让取随机值,那是为了方便我们调试程序,如果野指针的初值不确定,那么每次调试同一个程序就可能出现不一样的结果,比如这次程序崩掉,下次却能正常运行,这样显然对我们解bug是非常不利的,所以自动初始化的目的是为了让我们一眼就能确定我们使用了未初始化的野指针了。


        常见默认值说明:

        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()





 

posted on 2013-09-15 19:20  you Richer  阅读(1057)  评论(0编辑  收藏  举报