經典亂碼「燙燙燙」和「屯屯屯」

2021-07-29 18:25:29 字數 366 閱讀 7369

經典亂碼「燙燙燙」和「屯屯屯」

程式猿有個經典的內部笑話:手持兩把錕斤拷,口中疾呼燙燙燙。

燙燙燙和屯屯屯產生自vc,這是debug模式下vc對記憶體的初始化操作。vc會把棧中新分配的記憶體初始化為0xcc,而把堆中新分配的記憶體初始化為0xcd。(0xcc恰好是終端指令int 3,算是保護嗎?)把0xcc和0xcd按照字元列印出來,就是燙和屯了。

還有錕斤拷,這個是字元編碼造成的。在進行從老的編碼體系到unicode的轉換過程中,部分字元不能轉化,於是unicode給了它們乙個特殊的佔位符u+fffd,這個用utf-8表示就成了\xef\xbf\xbd。如果出現兩個連著的\xef\xbf\xbd\xef\xbf\xbd,按照兩個位元組乙個字顯示成漢字,就成了錕斤拷這三個字。

Debug時,記憶體裡怎麼都是「燙燙燙燙燙燙」

在 debug 模式下會自動加上 gz 編譯選項,它可以幫助捕獲記憶體錯誤。gz 選項會做以下這些事 1 初始化記憶體和變數。包括用 0xcc 初始化所有自動變數,0xcd cleared data 初始化堆中分配的記憶體 即動態分配的記憶體,例如 new 0xdd dead data 填充已被釋放...

燙燙燙」和「屯屯屯」

在c語言中,變數在宣告時,並不會對變數對應記憶體區域進行清理操作。此時,變數值可能是完全不可預期的結果。開發者需要習慣在使用c語言進行宣告時要初始化操作,稍有不慎,就會造成不可預知的後果。在網路上只有程式設計師才能看懂的 燙燙燙 和 屯屯屯 的梗,就 於c c 中變數預設不初始化。微軟的 vc 編譯...

有趣的「燙燙燙燙」和「屯屯屯屯」

相信在vc下除錯過 的同學都遇到過這種情況,想看乙個字串的值,結果發現顯示的是一串長長的 燙燙燙燙燙燙燙燙 或 屯屯屯屯屯屯屯屯屯屯屯 囧!在visual studio中的debug模式下,如果宣告乙個變數,但是沒有初始化,微軟會給未初始化的記憶體複製為0xcc。給為初始化的記憶體賦0xcc是有原因...