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