標籤:

C 語言代碼出錯為什麼顯示「燙燙燙」,而不是其它字?


此問題應該是只出現在VC的 Debug 模式下。

對於未初始化的棧內存全部填成 0xcc,對應於漢字字元串看就是 燙燙燙燙……

對於未初始化的堆(new)內存全部填成 0xcd,對應於漢字字元串看就是 屯屯屯屯……

Release模式下直接就是內存中隨機的數據。

Google一下你就知道答案了,類似的問題早就有很多人提出來了


因為爛代碼會讓CPU過熱


這是Windows"燙燙燙"的原因,出自《軟體調試》,張銀奎


一個0xcc是x86中斷指令int 3的機器碼,兩個0xcc(0xcccc)就是一個燙字。0xcdcd是中斷指令int 0xcd的機器碼,就是一個屯字。他們在被執行的時候都會導致debugger中斷因為通常認為未初始化的內存不應該被執行。


編程精粹裡面解釋過這個問題,p49.Microsoft applications use 0xCC to fill blocks because it is large and easily noticeable, and if executed, causes the code to safely drop into the debugger.只在debug模式下,微軟的編譯器行為。


0xff / 2 有的也會燙燙燙。哈哈


推薦閱讀:

char *ds = gets();這行代碼在VS2017為什麼可以運行,沒有error?
在寫代碼的時候,加法快還是乘法快還是都一樣?
軟體乘法和硬體乘法哪個效率高?為什麼?
對於學生黨什麼編程語言比較適合?
如何評價"Null reference - my billion-dollar mistake"?

TAG:C編程語言 |