誤寫zlib帶來的問題

2021-07-25 21:47:57 字數 572 閱讀 9023

網路通訊資料較大,用到了zlib.

最近碰到乙個崩潰的問題,追蹤後發現zlib的使用有問題。

而後自己寫了一段測試**,確實是使用有問題。

byte pcompressdata[3] = ;

dword dwaftercompresssize = 1024;

byte* pbitmapdata = (byte*)malloc(1024*1024);

int iret = compress( pcompressdata, &dwaftercompresssize, pbitmapdata, 1024*1024);

比較容易讓人誤解的是,iret的返回值是z_buf_error,讓人以為zlib正常執行了。

實際上對於zlib來說,它確實正常執行了,但是它訪問了不該訪問的記憶體,造成了不可預知的問題;而後程式崩潰,並且定位不到錯誤,那也就是順理成章的事情了。

這件事有兩個教訓:

作為介面的提供者,盡可能多的作引數的合法性檢查;當然在這次崩潰的情況下,不是合法性檢查不嚴謹引起的;

作為藉口的呼叫者,盡可能多的作引數的合法性檢查;因為一不小心,會訪問到不改訪問的記憶體位址。

float帶來的問題

因為浮動定位不屬於正常的頁面流,所以當子元素都是浮動元素時,非浮動的父容器在顯示時不會考慮子元素的位置,這樣子父元素就會出現坍塌的現象。1.新增空元素在父容器末尾新增乙個空元素,並且清除浮動,如 html class layout class content div class content di...

insert select帶來的問題

當使用 insert.select.進行記錄的插入時,如果select的表是innodb型別的,不論insert的表是什麼型別的表,都會對select的表的紀錄進行鎖定。對於那些從oracle遷移過來的應用,需要特別的注意,因為oracle並不存在類似的問題,所以在oracle的應用中insert....

insert select帶來的問題

當使用 insert select 進行記錄的插入時,如果select的表是innodb型別的,不論insert的表是什麼型別的表,都會對select的表的紀錄進行鎖定。對於那些從oracle遷移過來的應用,需要特別的注意,因為oracle並不存在類似的問題,所以在oracle的應用中insert ...