Привет, У меня есть следующий код, он принимает узлы от slaveQueue и preload до preload1 и preload2, но память всегда увеличивается. Я предполагаю, что он должен быть выпущен после вызова dfs, поскольку вся память должна быть освобождена после возвращения локальной функции, и я проверил, что функция pop() также освободит память? так что я задаюсь вопросом, где моя утечка памяти? БлагодаряC++ Ошибка памяти
queue<Graphnode> *preload1 = new queue<Graphnode>;
queue<Graphnode> *preload2 = new queue<Graphnode>;
for(int n = windowWidth; n > 0; n--)
{
if((*slaveQueue).empty())
{
//cout <<"fffffffffffff"<<endl;
break;
}
(*preload2).push((*slaveQueue).front());
//cout << (*slaveQueue).size()<<endl;
(*slaveQueue).pop();
}
int preload1No =0;
while(!(*preload2).empty())
{
preload1No++;
*slaveroot = (*preload2).front();
(*preload2).pop();
if(!(*slaveQueue).empty())
{
(*preload2).push((*slaveQueue).front());
(*slaveQueue).pop();
}
dfs(*slaveroot,goal,totalDepth,*preload1,*preload2,checkfile);
if(preload1No>windowWidth)
{
(*preload1).push(*slaveroot);
(*preload1).pop();
}
else
{
(*preload1).push(*slaveroot);
}
cout<<(*preload1).size()<<"\t"<<(*preload2).size()<<endl;
}
delete slaveroot;
delete preload1;
delete preload2;
delete slaveQueue;
для каждого 'нового' вам нужно' delete', и для каждого 'delete' вам нужно' new'. Ваш код выглядит хорошо, потому что вы не передадите копию своего прохода указателю на. – andre
Лучше все еще - читайте о RAII, избегайте 'нового', когда вы можете –
Возможно, вы изучили Java или C#? –