我的代码中有内存泄漏,但我无法找到一个解决方案来释放在创建对象并将其推入对象向量的函数中分配的内存。
主要功能如下:
void foo(vector<vector<BCC>> &features){
vector<MinutiaPair*> matchingMtiae;
for (int i = 0; i < features.size(); i++){
Match(features[0], features[i], matchingMtiae);
ms += s;
// Free memory
for (int j = 0; j < matchingMtiae.size(); j++)
delete (matchingMtiae[j]);
matchingMtiae.clear();
}
循环的每一步在值之间执行一个比较,并用新对象返回一个“新”向量matchingmtiae。然后,在下一次迭代中,我想完全释放这个向量并从内存中释放它的内容创建对象并将其推入向量的匹配函数
matchingMtiae
现介绍如下:
void Match(vector<BCC> &qt, vector<BCC> &tt, vector<MinutiaPair*> &reducedMatchingPairs) {
vector<MinutiaPair*> localMatching;
for (int i = 0; i < qt.size(); i++)
for (int j = 0; j < tt.size(); j++)
{
double currSim = qt[i].Match(tt[j], true);
if (currSim > 0)
{
qt[i].minutia.Flag = false;
tt[j].minutia.Flag = false;
MinutiaPair *pair = new MinutiaPair(qt[i].minutia, tt[j].minutia, currSim);
localMatching.push_back(pair);
}
sort(localMatching.begin(), localMatching.end(), MtiaPairComparer::ComparePointers);
for (int k = 0; k < localMatching.size(); k++)
{
if (!localMatching[k]->QueryMtia->Flag || !localMatching[k]->TemplateMtia->Flag)
{
reducedMatchingPairs.push_back(localMatching[k]);
localMatching[k]->QueryMtia->Flag = true;
localMatching[k]->TemplateMtia->Flag = true;
}
else
{
delete (localMatching[k]);
}
}
}
调试我的代码后,我意识到在删除和清除矢量之后
配对支原体
,创建的对象仍在内存中分配,我无法理解发生这种情况的原因,因为指针没有丢失,而是保留在向量中。
我想从内存中释放创建的对象,并从指针中完全清除向量两者都是我的目标。
提前谢谢。