最近一直在糾結這個問題.
最近寫代碼,總是遇到這個問題,一旦遇到這個問題,以前好使的代碼也就不好使了。很費解,上網搜集了下資料....
這個0xcccccccc是DEBUG模式下,編譯器為沒有初始化的指針填充的地址值。當你進入到斷電時,也會看到很多其他的未初始化的指針都是這個值
而為什么會是這個值呢?
因為,0xcc是INT 3的機器碼,而這個INT 3是留給編譯器中斷時用的 替換向量,一旦斷電繼續執行下,就會替換掉這個值。
為什么系統要填充這個固定的值呢?
因為,在DEBUG模式下,就是為了測試代碼的運行。如果每次都隨機指定一個地址,那最后測試的結果也會不一樣。如果隨機填充了一個地址,這個地址在未經初始化的情況下使用了,但是換到RELEASE模式下的時候,就會出現意外的情況。因此,添加這個值,確保指針在使用前都經過了初始化。
其他還有固定的地址值對應的錯誤:
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()