写项目时为了让变量一直存在我选择用new来创建类对象,为了使程序结束方便清楚,我将new的对象都放在了一个指针容器内,最后一起delete。
就是相当于记录了申请出来的指针地址。
类似举例:
//一开始的创建并存放
int *p=new int;
vector<int*> vec;
vec.push_back(p);
//程序结束后的清除
delete *vec.begin();
vec.erase(vex.begin());
由于我第一次这样写,所以为了怕内存泄露,在另一个项目里用快照测试了一下。结果测试出来发现就算delete依旧泄露了4个字节,如果我结束不进行delete甚至泄露了8字节。
不建议这样释放vector中指针,建议先轮询 delete ,然后给指针赋值为NULL,防止野指针。最后统一clear
for(std::vector<int*>::iterator it = vec.begin(); it != vec.end(); ++it)
{
if(*it)
{
delete (*it);
(*it) = NULL;
}
}
vec.clear();
为什么delete *vec.begin()呢,*是取值啊,试试 delete vec.begin();
当然,得用循环逐个delete掉
有没有大佬碰到过这种情况😭
for(int i =0; i < vec.size(); i++) {
delete vec[i];
}
猜测可能是vector中的指针没有置0,程序里有个野指针。
用下面的试试:
int *p=new int;
vector<int*> vec;
vec.push_back(p);
//程序结束后的清除
int* ps = *vec.begin();
delete ps;
ps = 0; //这里将ps=0,消除野指针
vec.erase(vec.begin());