返回信息流定义了一个存储对象指针的vector(假设叫a),然后用一个循环new了很多对象,并将对象的指针都放入到vector中。(对象对应的类中还有一个vector<node*>的指针动态数组)
在delete释放内存的时候,①先通过循环释放对象指针指向空间delete a[i] ②然后在删除数组delete []a。
经过这个操作在vs中利用_CrtDumpMemoryLeaks()查看内存泄漏,仍有有内存泄漏。泄漏的断点复查是push_back那个语句。检测手段参考的https://blog.csdn.net/mfcing/article/details/42673393
实在想不出来为啥内存一直有泄漏了,①以为是得重写类的析构函数,重写了析构函数没改善内存泄漏的情况;②以为是push_back浅拷贝的缘故,改用数组之后发现泄漏的情况有稍微改善。③基于②的思路重写了拷贝赋值函数,但是可能我的打开方式不对,泄漏情况仍旧未改善。
贴出代码 请各路的大佬来帮忙看看
附测试代码(含内存泄漏):
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<iostream>
#define _CRTDBG_MAP_ALLOC
#include<stdlib.h>
#include<crtdbg.h>
using namespace std;
class people
{
public:
int schoole;
};
class stu
{
public:
int age;
int shengao;
float Tizhong;
vector<people*> peopleListPtr;
};
int main()
{
vector <stu*> wlpointerArray;
for (int i = 0; i < 5; i++)
{
stu * wl = new stu;
wl->age = 22 + i;
wl->shengao = 172 + i;
wl->Tizhong = 55.3 + i;
for (int j = 1; j < 2; j++)
{
people *p = new people;
p->schoole = j + 100;
wl->peopleListPtr.push_back(p);
}
wlpointerArray.push_back(wl);
}
for (int i = 0; i < wlpointerArray.size(); i++)
{
for (int j = 0; j < wlpointerArray[i]->peopleListPtr.size(); j++) {
delete wlpointerArray[i]->peopleListPtr[j];
wlpointerArray[i]->peopleListPtr[j] = NULL;
}
delete wlpointerArray[i];
wlpointerArray[i] = NULL;
}
_CrtDumpMemoryLeaks();
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #97415同步于 2018/4/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
C++中内存泄漏的大坑~摔太惨
loongking
2018/4/15镜像同步35 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我觉得是内层循环delete 掉wlpointerArray->peopleListPtr后,内层循环的peopleListPtr.size()也会随着改变 导致有些元素没有被释放[ema3]