發現一個C語言BUG,定義int變量時靠近char的變量會變成0,是什麼原因?

小幹探


很多開發人員都有過這樣的經歷,當被一些稀奇古怪的問題折騰得精疲力盡時,就開始懷疑開發環境的問題,懷疑編譯器的問題,懷疑運行時的問題,甚至開始懷疑人生[捂臉]

沒錯,我也遇到過,不過最終發現,開發環境、編譯器和運行時出 bug 的概率太低了,比買雙色球中獎的概率還低。問題還是自己的問題,只是定位問題的過程比較曲折而已。

題主所說的問題大概有這兩種情況:

1,定義變量沒賦初值,這種情況下變量值是不確定的,可以是任何值,也可能是 0。

2,變量在某個時候被其他地方修改了,如通過指針的方式修改,或調用函數時引用傳參並被修改。 這兩種方式在代碼層面可能不太直觀,容易被忽略。

所以題主可以試下按照我說的情況加以分析定位問題。


熙爸愛釣魚


char[3];

uint8 i;

char="ABCD";

//字符串賦值時會在字符串的最後自動加上一個0x00,此時就會把後面的整數i變成0了。

還有一種可能,是你定義了一個char變量,但是賦值的時候你用了雙引號,就變成了字符串賦值了。如char a="A"; //此時會給a賦一個值'A',同時在後面一個BYTE中寫一個0正好就是整數i的位置,i就被清零了。

認為錯了的告訴我哪錯了。


芝麻小龍


應該是你代碼的bug,不是語言的bug,內存對齊,內存洩露,運行時存在野指針訪問表像都有可能是你所謂的問題,但絕對不是語言的問題。


LegendaryMK


初始化的問題吧,或者說你定義的變量是全局變量,重新進來的時候又初始化了。問題描述的不清楚,開發平臺是什麼。最好把代碼放上來看看


小羊看科技


你咋不說Python的round四捨五入?個別不準確。還有小數相加會多0.00000000000xxx


IT小白鼠


上代碼啊,你的表述沒人看懂


a不帥的大叔a


這個問題簡直太扯了,自己檢查下代碼,尤其是符號和括號什麼的


鋼鐵皮皮蝦


誰跟我一樣是碼農,編譯一個程序要花上二十分鐘,無聊的等待,來刷頭條。

題主說的這個不是語言問題,一般都是自己變量初始化,或者編譯器問題,刪除編譯文件重新編譯試一試。


阿財201811


定義整型變量後你不給他賦值,直接輸出就是0,devC++實測


1976553400


局部變量未初始化的是隨機值(esp棧-sizeof(type)保留位置罷了,內容是垃圾值)。

全局/靜態未初始化變量是在 bss段,運行時全零化(.lcomm varName N指定字節罷了)


分享到:


相關文章: