delete一个new的指针依然内存泄露问题探讨

写项目时为了让变量一直存在我选择用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());