|
發(fā)布時間: 2021-1-15 14:38
正文摘要:今天調(diào)試C語言代碼發(fā)生了很邪門的事情,一開始宏定義了一個數(shù)字NUM,大小1024(0x0400),作為參數(shù)傳給函數(shù)。結(jié)果傳給子函數(shù)之后,變量變成了0x6E36(十進(jìn)制28214)。而且我把宏定義換成變量賦值,結(jié)果沒有任何改變 ... |
| 函數(shù)內(nèi)數(shù)據(jù)類型與輸入不一致,運(yùn)算錯誤,好好檢查 |
| 1.重名 2.數(shù)據(jù)類型溢出 |
|
以我的經(jīng)驗(yàn),懷疑Median_Filter的參數(shù)傳遞時發(fā)生了問題。重點(diǎn)是第一個參數(shù)。因?yàn)槭侵羔樞偷模苋菀滓绯龅降诙䝼參數(shù)所在的單元上去。所以建議你把參數(shù)順序?qū)φ{(diào)一下。把a(bǔ)rgc放在前面,argv放在后面試試。 指針型的參數(shù),在沒遇到'\0'結(jié)束符號之前,會一直持續(xù)下去。 另外你可以試試,第一個參數(shù)在傳遞之前,務(wù)必進(jìn)行初始化,保證存在結(jié)束符'\0'。在賦值時,也要保證不覆蓋掉結(jié)束符'\0'。對int型的,因?yàn)橐粋數(shù)據(jù)占兩個單元,這時結(jié)束符'\0'務(wù)必要保證在有效數(shù)據(jù)后。如下例如某個int型指針指向的數(shù)據(jù):0x10 0x00 0x00,這里的第一個0x00是不能作為結(jié)束符的,因?yàn)镮nt型數(shù)據(jù)占兩個字節(jié),所以第一個0x00是數(shù)據(jù)的一部分(低八位數(shù)據(jù))。第二個0x00才是有效的結(jié)束符。 |
| 走到28行再看結(jié)果,現(xiàn)在的位置變量還沒有刷新,你看到的是以前的數(shù)據(jù)。 |
|
再執(zhí)行一步,看呢! 監(jiān)控窗口數(shù)值,可能沒更新! 如果確定是傳入數(shù)值異常,你可以在定義部分等位置加點(diǎn)其它不被優(yōu)化掉的定義、代碼再試試,看看傳入值是否正常了! |
| 參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
|---|---|---|
|
| + 20 | 回帖助人的獎勵! |
| 全局查找NUM,估計有重名的吧 |
Powered by 單片機(jī)教程網(wǎng)