
分析:在函數(shù)內(nèi)部不能改變指針指向的地址,。當(dāng)TrunkHBDeactive函數(shù)調(diào)用SetTimeHandle函數(shù)獲取指針的時(shí)候,實(shí)際上pTime的值根本沒有改變,始終為一個(gè)空指針。
注:對(duì)函數(shù)參數(shù)所在的存儲(chǔ)單元的直接修改不會(huì)作用在函數(shù)之外,但是對(duì)參數(shù)存儲(chǔ)單元中存放的地址指向的存儲(chǔ)單元的修改,則會(huì)在函數(shù)之外起作用。
總結(jié):函數(shù)內(nèi)部不能修改指針指向的地址 TimerHandle,但可改變指針指向得知的內(nèi)容 *TimerHandle:

分析:局部變量的內(nèi)容存放在堆棧內(nèi),其所占用的空間在函數(shù)返回后會(huì)自動(dòng)釋放,導(dǎo)致函數(shù)返回的指針指向了不可預(yù)知的內(nèi)存。故要注意不要返回局部變量堆棧中的地址。
修改方法如下:傳入一個(gè)已經(jīng)由上層函數(shù)分配好空間的指針,并在函數(shù)內(nèi)部修改指針指向的內(nèi)容。這樣就可以確保函數(shù)返回后,pData指針指向的內(nèi)容仍然是有效的。

問題一:

問題二:

分析:大端序存儲(chǔ)順序:高地址存儲(chǔ)低位字節(jié),低地址存儲(chǔ)高位字節(jié);小端序存儲(chǔ)順序:低地址存儲(chǔ)低位字節(jié),高地址存儲(chǔ)高位字節(jié)。函數(shù)對(duì)4字節(jié)序的修改只會(huì)修改2個(gè)字節(jié),在大端序cpu中修改高位字節(jié)導(dǎo)致錯(cuò)誤。
1,當(dāng)目的結(jié)構(gòu)的空間大于源結(jié)構(gòu)的空間時(shí),考慮越界問題。 2,當(dāng)目的結(jié)構(gòu)的空間小于源結(jié)構(gòu)的空間時(shí),考慮字節(jié)序(大小端)問題。 3,在把某些變量或數(shù)組或結(jié)構(gòu)強(qiáng)制轉(zhuǎn)換為另一種結(jié)構(gòu)體時(shí),需要考慮字節(jié)對(duì)齊問題。 4,基本數(shù)據(jù)類型(char,int,short,long)的強(qiáng)制類型轉(zhuǎn)換比結(jié)構(gòu)體之間的強(qiáng)制類型轉(zhuǎn)換更容易出現(xiàn)上訴情況。 5,不要將字符串常量強(qiáng)制轉(zhuǎn)換為字符指針(const char * —-> char *),以免導(dǎo)致改寫只讀數(shù)據(jù)的段錯(cuò)誤。
問題一:

分析:ucCount不可能大于)xFF,導(dǎo)致死循環(huán)。故要注意,使用循環(huán)變量不能使用UC類型(unsigned char),最好使用US(unsigned short)或UL(unsigned long),避免循環(huán)邊界值大于255導(dǎo)致死循環(huán)。
問題二:

當(dāng)ulTimeOutInMillSec非常大時(shí),乘以100有可能導(dǎo)致溢出,乘法的結(jié)果會(huì)變成一個(gè)很小的值。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注