【发布时间】:2023-03-26 10:34:01
【问题描述】:
我现在已经搜索了 2 个小时,并试图弄清楚如何完成这项非常简单的任务。
vector<vector<MappedGraphItem*>> odd_vertex_matrix;
当我将项目添加到向量时,它看起来像这样:
for (auto i : odd_vertices) {
oci = 0;
for (auto j : odd_vertices) {
odd_vertex_matrix[ori][oci] = new MappedGraphItem(i, j, adjacentMatrix[i][j]);
odd_vertex_matrix[oci][ori] = new MappedGraphItem(j, i, adjacentMatrix[j][i]);
oci++;
}
ori++;
}
对于那些好奇的人,这是 MappedGraphItem 类的样子
#include "common.h"
class MappedGraphItem {
public:
MappedGraphItem(int ari, int aci, float w) :
adj_row_index(ari),
adj_col_index(aci),
weight(w) {}
MappedGraphItem() :
adj_row_index(0),
adj_col_index(0),
weight(0) {}
~MappedGraphItem() {}
int adj_row_index;
int adj_col_index;
float weight;
};
当我去删除二维向量时,我使用这个:
for (auto i = odd_vertex_matrix.begin(); i != odd_vertex_matrix.end(); ++i)
for (auto j = i->begin(); j != i->end(); ++j)
delete *j;
然而,我仍然遇到内存泄漏。有人可以告诉我我做错了什么吗?我真的不会使用智能指针。我不认识他们,我觉得他们对我在这里想要做的事情有点矫枉过正。一定有一个简单的方法。
-谢谢!
【问题讨论】:
-
ori和odd_vertices是什么?最好发布一个 MCVE。另外,你真的需要存储指针吗? -
数组在首次填充和删除之间是否会发生变化?即使您删除它的代码很好,如果数组正在更改,也会有泄漏。绝对推荐这种情况下的智能指针。
-
@juanchopanza
ori和oci只是从 0 开始的int计数器。adjacentMatrix只是一个二维浮点数组。我不明白知道这些与我的问题有什么关系。我只想知道用什么语法来删除向量 -
@JamesDean 你看不出它为什么相关?因为根据索引的值,您可能会疯狂地泄漏内存?
标签: c++ visual-c++ memory-management vector memory-leaks