废话不多上代码,可以看到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);
}
}