读书人

vector以致内存不断增长

发布时间: 2013-03-10 09:38:39 作者: rapoo

vector导致内存不断增长
C++新手,
线程循环判断打印机队列信息
10毫秒是方便测试使用.
结果发现内存不断上升,何解?


{
//文档名
CString documentName;
DWORD dStatus;
//序号
int dindex;
};
//获取打印队列详细信息返回vector
vector<CPrintDealSrv::PRINTER_JOB_INFO>* CPrintDealSrv::GetPrintJobList(void)
{
vector<PRINTER_JOB_INFO>* vlist = new vector<PRINTER_JOB_INFO>;

CString strPrinterName = _T("Microsoft XPS Document Writer");
HANDLE hPrintHandle;
LPTSTR lpPrinerName = strPrinterName.GetBuffer();
strPrinterName.ReleaseBuffer();


JOB_INFO_2 *pJobs;
int cJobs;
DWORD dwPrinterStatus;

PRINTER_JOB_INFO jobSimpleInfo;
jobSimpleInfo.documentName = pJobs[i].pDocument;
jobSimpleInfo.dindex = (i+1);
jobSimpleInfo.dStatus = pJobs[i].Status;
vlist->push_back(jobSimpleInfo);


return vlist;
}
//线程方法
UINT CPrintDealSrv::thStartPrintSrv(LPVOID lparm)
{

CPrintDealSrv * pPrintDeal = (CPrintDealSrv*)lparm;
vector<PRINTER_JOB_INFO>* vlist;
while(true)
{

vlist = pPrintDeal->GetPrintJobList();
Sleep(10);
delete vlist;
}
}

[解决办法]
vlist->clear(),然后再delete
[解决办法]
pJobs怎么来的?
[解决办法]
vector<PRINTER_JOB_INFO>* vlist = new vector<PRINTER_JOB_INFO>;

为什么要这样创建啊?
[解决办法]
每10ms就调用CPrintDealSrv::GetPrintJobList(void)
并且这个函数里还要执行new操作。
vector<PRINTER_JOB_INFO>* vlist = new vector<PRINTER_JOB_INFO>;
效率太低了。

你可以且个全局变量或静态变量呀,这样就不要每次都分配内存了。
[解决办法]
定义为成员变量 都是
vector<CPoint*> vlist
CPoint *point= new CPoint;
vlist.push_back(point);
[解决办法]
试了一下,似乎问题没有出现在vector上。
检查一下向vector中添加的内容吧,lz贴的代码不完整,看不出来。

引用:
引用:vlist->clear(),然后再delete
clear无效

[解决办法]
成功后没看见你释放
pJobStorage = (JOB_INFO_2 *)malloc(cByteNeeded);这个申请的内存
[解决办法]

//获取成功
else{
if (cJobs > 0)
{
//队列中有待打印文档
for (int i = 0;i < cJobs; i ++)
{
PRINTER_JOB_INFO jobSimpleInfo;
jobSimpleInfo.documentName = pJobs[i].pDocument;


jobSimpleInfo.dindex = (i+1);
jobSimpleInfo.dStatus = pJobs[i].Status;
vlistPrintJobInfo->push_back(jobSimpleInfo);
}
}
//释放内存
free pJobs;
}

读书人网 >VC/MFC

热点推荐