自定义了一个结构体,成员变量内存释放的问题

C++语言 码拜 8年前 (2016-04-06) 1585次浏览
废话不多上代码,可以看到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指针是指向你本人申请的内存块,退出后当然需要你本人释放

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);
	}
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明自定义了一个结构体,成员变量内存释放的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)