C 語言代碼出錯為什麼顯示「燙燙燙」,而不是其它字?
01-07
此問題應該是只出現在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編程語言 |