国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C語言低級錯誤案例

2019-11-11 05:20:52
字體:
來源:轉載
供稿:網友

一,修改函數形參

這里寫圖片描述

分析:在函數內部不能改變指針指向的地址,。當TrunkHBDeactive函數調用SetTimeHandle函數獲取指針的時候,實際上pTime的值根本沒有改變,始終為一個空指針。

注:對函數參數所在的存儲單元的直接修改不會作用在函數之外,但是對參數存儲單元中存放的地址指向的存儲單元的修改,則會在函數之外起作用。

總結:函數內部不能修改指針指向的地址 TimerHandle,但可改變指針指向得知的內容 *TimerHandle:

這里寫圖片描述

二,返回局部變量(堆棧)的地址

這里寫圖片描述 分析:局部變量的內容存放在堆棧內,其所占用的空間在函數返回后會自動釋放,導致函數返回的指針指向了不可預知的內存。故要注意不要返回局部變量堆棧中的地址。

修改方法如下:傳入一個已經由上層函數分配好空間的指針,并在函數內部修改指針指向的內容。這樣就可以確保函數返回后,pData指針指向的內容仍然是有效的。

這里寫圖片描述

三,強制類型轉換和字節序

問題一:

這里寫圖片描述

問題二:

這里寫圖片描述

分析:大端序存儲順序:高地址存儲低位字節,低地址存儲高位字節;小端序存儲順序:低地址存儲低位字節,高地址存儲高位字節。函數對4字節序的修改只會修改2個字節,在大端序cpu中修改高位字節導致錯誤。

強制轉換靈活性/安全性總結:

1,當目的結構的空間大于源結構的空間時,考慮越界問題。 2,當目的結構的空間小于源結構的空間時,考慮字節序(大小端)問題。 3,在把某些變量或數組或結構強制轉換為另一種結構體時,需要考慮字節對齊問題。 4,基本數據類型(char,int,short,long)的強制類型轉換比結構體之間的強制類型轉換更容易出現上訴情況。 5,不要將字符串常量強制轉換為字符指針(const char * —-> char *),以免導致改寫只讀數據的段錯誤。

四,變量溢出

問題一:

這里寫圖片描述

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

問題二:

這里寫圖片描述

當ulTimeOutInMillSec非常大時,乘以100有可能導致溢出,乘法的結果會變成一個很小的值。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三亚市| 无为县| 富源县| 黔东| 龙海市| 上饶县| 循化| 西昌市| 石家庄市| 长寿区| 巫山县| 永善县| 二连浩特市| 峨眉山市| 凉山| 丹巴县| 内乡县| 甘南县| 金溪县| 卢湾区| 广水市| 高密市| 阜城县| 西盟| 即墨市| 汶川县| 双流县| 乌拉特前旗| 石棉县| 武隆县| 张家港市| 皋兰县| 丹巴县| 通道| 杭锦后旗| 玉山县| 镇巴县| 开鲁县| 利辛县| 桐柏县| 神农架林区|