堆栈中的局部变量(包括指针)在明确初始化之前都用0x0cc进行初始化。这是编译器在作运行时检测用的,方便发现变量没有初始化、内存溢出的问题。
0xcc执行检测的原理:
(1)变量:如果没有给它初始化,那么值就是0xcc。
(2)指针:或者说内存,初始时赋给地址0xcc。这是一块内核的内存,一般情况下不能被操作的,因此,当发现对地址为0xcc的内存进行操作,就说明是非法的,提示溢出。
0xcc输出成字符就是“烫烫...”,这就是为什么未初始化的内存总显示“烫烫...”的原因。
(注意:只有在debug版本下才会这么做,在release版本下是随机值)