我对内存泄漏有疑问。可能是一个基本的。
map_a is an map of <int, vector<int>*>
ptr is an pointer to an vector of ints.
在for循环中,我在map_a中搜索'element'。如果未找到指针,则在map_a中创建一个新的向量/记录。
C ++伪代码:
map map_a;
for ( 1 to 10 ) {
element = <int number come from a different algorithm, diff every time>;
vector<int> *ptr = map_a[element];
if (!ptr) {
ptr = new vector<int>;
map[element] = ptr;
}
ptr->push_back(i);
}
如何释放我们使用new分配的内存?我相信我们可能有其他方法来实现这种情况。但是如何采用这些代码呢?还有其他选择吗?
答案 0 :(得分:0)
c ++中的任何指针都以相同的方式释放。因此,如果你有一个指向矢量的指针,你可以像这样调用delete:
vector<int> *a = new vector<int>();
delete a;
但是我认为,除了使用动态分配的向量之外,最有可能有更好的解决方案。
编辑:从您的问题来看,在周期之前地图是否为空是不明显的。如果是,您只需迭代它并为其每个值调用delete:
for (auto it = map_a.begin(); it != map_a.end(); ++it) {
delete it->second.
}
但是如果地图不是空的,你需要一个辅助容器(比如一个向量)来存储在这个循环中分配的指针:
map map_a;
vector<vector<int> * > allocated;
for ( 1 to 10 ) {
element = <int number come from a different algorithm, diff every time>;
vector<int> *ptr = map_a[element];
if (!ptr) {
ptr = new vector<int>;
allocated.push_back(ptr);
map[element] = ptr;
}
ptr->push_back(i);
}
for (int i = 0; i < allocated.size(); ++i) {
delete allocated[i];
}