本節書摘來自異步社群出版社《從缺陷中學習c/c++》一書中的第6章,第6.10節,作者: 劉新浙 , 劉玲 , 王超 , 李敬娜 , ,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
從缺陷中學習c/c++
代碼示例
現象&結果
申請的數組空間沒有全部釋放,造成記憶體洩露。用cppcheck工具執行靜态代碼掃描可以看到如下資訊:(error) mismatching allocation and deallocation: buf。
bug分析
對于數組類型,如 string str = new string[10],用delete str和delete [] str的差別是,delete str隻對str[0]調用了析構函數,而delete []str則對str數組裡的每個元素都調用了析構函數。對于單個元素,如 int p =new int (10),delete和delete []都可以釋放記憶體。
正确代碼
程式設計建議
操作記憶體的時候,new[]一定要和delete[]對應。
本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。