vector 的push_back()在release下崩潰問題


最近幾天遇到程序在debug下沒有問題,在release下崩潰的問題。

崩潰的地方是vector的push_back()函數,分配內存報錯。在網上搜了很多辦法都沒有生效。

具體問題是:在visual studio 2015下開發的dll程序。相關屬性設置:

屬性--通用--字符集--Use Unicode Character Set;屬性--C/C++--代碼生成--MT。

解決辦法是在調用push_back()前先調用reserve()。就是預留內存。

之前嘗試過不用push_back(),在前面先resize()然后直接賦值,還是崩潰,只有使用reserve()的方法暫時幫我解決了問題。

后面經過大量測試,還是會經常出現release崩潰,不僅vector的reserve會崩潰,resize和push_back都會崩潰,而且外面調用的MFC程序的fdlg.DoModal() == IDOK也會崩潰。

最終查到原因是程序中的一處new有問題,把這一句注釋掉其他問題就不存在了。解決辦法是在派生類中的指針換成類對象。

具體問題是派生類二中有一個指針,基類中是空的,因此當基類的指針指向派生類二時release下后續步驟就會崩潰(debug是不會崩潰的,但是在釋放的時候會崩潰)。

由於派生類一中不存在指針,所以也就不存在派生類二出現的問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM