天天看點

《從缺陷中學習C/C++》——6.8 指針釋放後再次使用

本節書摘來自異步社群出版社《從缺陷中學習c/c++》一書中的第6章,第6.8節,作者: 劉新浙 , 劉玲 , 王超 , 李敬娜 , ,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

從缺陷中學習c/c++

代碼示例

現象&結果

程式運作時出現coredump。

bug分析

上述代碼中,在函數function_a中執行個體化了myclass對象指針a,然後調用函數function_b,在function_b中,對指針a操作之後,執行delete操作,将a所指對象釋放掉。随後,function_a調用函數function_c,在function_c中又再次操作指針a。

此時,指針a為空,是以,當調用a→getvalue時發生coredump。這裡存在的一個問題是編碼風格不好,對象的配置設定使用釋放混亂。

一個函數配置設定,一個函數釋放,一個函數再次使用。導緻function_c不知道前面a已經被釋放。避免這種問題的一個辦法是:編碼時遵循“誰配置設定,誰釋放”的原則。即對象在哪裡配置設定,就在哪裡釋放。

正确代碼

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀