最近幾天遇到程序在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是不會崩潰的,但是在釋放的時候會崩潰)。
由於派生類一中不存在指針,所以也就不存在派生類二出現的問題。