废话不多上代码,可以看到while(true)循环中的vector的每一个元素(box)的成员data占的内存没有释放。
struct box { int a; int b; float * data; }; void fun1(vector<box> inputBoxs) { for(int i=0;i<20;i++) { box b; b.data = new float[10]; for(int j=0;j<10;j++) { b.data[j]=j; } inputBoxs.push_back(b); } } int main() { vector <box> boxgroup; while(true) { boxgroup.clear(); fun1(boxgroup); } }
原因是本人的vector是在fun1()函数外面声明的,所以vector的释放也应该是在外层。
改成每一个while循环创建一个vector也是不行。
int main() { while(true) { vector <box> boxgroup; fun1(boxgroup); } }
while循环结束并不会释放vector?
头大啊头大,主要是上周赵4老师的课本人在加班没听成,看来要回去补课啦
解决方案
3
本人new的就得本人delete
float * data;
改成用智能指针
2
记住有new,必delete
5
vector只是释放它本身申请的内存,例如100个box所占用的空间
而你data指针是指向你本人申请的内存块,退出后当然需要你本人释放
而你data指针是指向你本人申请的内存块,退出后当然需要你本人释放
10
按你的思路就得这样
void clearVector(vector<box>& box) { for (auto& i : box) { if (i.data) delete[] i.data; } box.clear(); } int main() { vector <box> boxgroup; while (true) { clearVector(boxgroup); fun1(boxgroup); } }