在VC6下調(diào)試程序,可能會(huì)遇到諸如指令引用“0xcccccccc”,該內(nèi)存不能為Read的報(bào)錯(cuò)
究其原因,就debug版中的堆棧中的局部變量(包括指針)在明確初始化之前都用0x0cc進(jìn)行初始化,因此,未初始化時(shí)候的指針是指向地址0x0cccccccc的,而這段地址一來是處于內(nèi)核地址空間,一般的應(yīng)用程序是無權(quán)訪問的,上面的報(bào)錯(cuò)就是這樣產(chǎn)生的。因此,一旦遇到上述報(bào)錯(cuò),基本可以認(rèn)定程序中出現(xiàn)了野指針。
另外一方面cc對(duì)應(yīng)著int 3調(diào)試中斷,堆棧中的存放的局部數(shù)據(jù)一般情況下是只讀的,當(dāng)發(fā)生意外執(zhí)行堆棧里面的數(shù)據(jù)就會(huì)引發(fā)該調(diào)試中斷。
可以認(rèn)為0x0cc就是有特殊含義的占位符,對(duì)于指針而言,它跟NULL是一個(gè)意思,其它具有特殊意義的占位符還有:
0xcdcdcdcd - Created but not initialized
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()