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是不会崩溃的,但是在释放的时候会崩溃)。

由于派生类一中不存在指针,所以也就不存在派生类二出现的问题。

 

posted @ 2020-06-23 08:45  巨鹿王十二  阅读(2185)  评论(0编辑  收藏  举报