![]() |
發布時間: 2021-1-15 14:38
正文摘要:今天調試C語言代碼發生了很邪門的事情,一開始宏定義了一個數字NUM,大小1024(0x0400),作為參數傳給函數。結果傳給子函數之后,變量變成了0x6E36(十進制28214)。而且我把宏定義換成變量賦值,結果沒有任何改變 ... |
函數內數據類型與輸入不一致,運算錯誤,好好檢查 |
1.重名 2.數據類型溢出 |
以我的經驗,懷疑Median_Filter的參數傳遞時發生了問題。重點是第一個參數。因為是指針型的,很容易溢出到第二個參數所在的單元上去。所以建議你把參數順序對調一下。把argc放在前面,argv放在后面試試。 指針型的參數,在沒遇到'\0'結束符號之前,會一直持續下去。 另外你可以試試,第一個參數在傳遞之前,務必進行初始化,保證存在結束符'\0'。在賦值時,也要保證不覆蓋掉結束符'\0'。對int型的,因為一個數據占兩個單元,這時結束符'\0'務必要保證在有效數據后。如下例如某個int型指針指向的數據:0x10 0x00 0x00,這里的第一個0x00是不能作為結束符的,因為Int型數據占兩個字節,所以第一個0x00是數據的一部分(低八位數據)。第二個0x00才是有效的結束符。 |
走到28行再看結果,現在的位置變量還沒有刷新,你看到的是以前的數據。 |
全局查找NUM,估計有重名的吧 |