使用列表列表时内存泄漏
Memory leak in using a list of lists
有人向我抛出了一些代码来"产品化"我运行了一个内存泄漏检查器,它调用下面"for"循环中的以下行作为内存泄漏。
someStruct->arrayMap = new std::list<BasisIndex>*[someStruct->mapSizeX];
for(int i=0; i<someStruct->mapSizeX; i++){
someStruct->arrayMap[i] = new std::list<BasisIndex>[someStruct->mapSizeY];
}
以下是数组映射的声明方式:
struct SomeStruct{
int mapSizeX;
int mapSizeY;
std::list<BasisIndex>** arrayMap;
};
以下是它的几个用法:
someStruct->arrayMap[xVal][yVal].push_back(tempIndex);
for(it = someStruct->arrayMap[xVal][yVal].begin(); it != someStruct->arrayMap[xVal][yVal].end(); it++){
...
}
内存泄漏检查器在我杀死它之前转储了5分钟。然后我在清理例程中添加了以下代码,但它仍然转储了150个警告,所有警告都指向顶部for循环中的代码行。
for(int x=0; x<someStruct->mapSizeX; x++){
for(int y=0; y<someStruct->mapSizeY; y++){
someStruct->arrayMap[x][y].clear();
someStruct->arrayMap[x][y].~list();
}
}
std::list<BasisIndex> ** temp = someStruct->arrayMap;
delete temp;
如何完全删除与此数组映射关联的内存?
按分配对象的相反顺序取消分配对象。
分配:
someStruct->arrayMap = new std::list<BasisIndex>*[someStruct->mapSizeX];
for(int i=0; i<someStruct->mapSizeX; i++){
someStruct->arrayMap[i] = new std::list<BasisIndex>[someStruct->mapSizeY];
}
交易地点:
for (int i=0; i<someStruct->mapSizeX; i++){
delete[] someStruct->arrayMap[i];
}
delete[] someStruct->arrayMap;
someStruct->arrayMap[x][y].~list();
<--您不应该手动调用析构函数。(当没有先使用placement new时,我甚至不知道这样做是有效的…)你需要使用delete
。
相关文章:
- 使用模板类的自定义列表类型中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- 避免在使用链接列表从 deque 中删除最后一个节点时出现内存泄漏
- C 中的学生指针节点列表中的内存泄漏
- 使用初始值设定项列表的初始化类成员会导致内存泄漏
- 如何在不泄漏内存的情况下删除链接列表
- 这会导致使用链接列表的内存泄漏
- 链接列表C 的复制构造函数中的内存泄漏
- 存在内存泄漏问题的链接列表
- 使用动态内存从向前列表中泄漏
- 双链接结构列表的内存泄漏
- 内存泄漏 C++ 数组列表
- 链接列表push_front和push_back中的C 内存泄漏
- 记忆泄漏与列表C
- 链接列表中的内存泄漏
- C++跳过列表实现-返回的值已损坏,内存泄漏
- 删除列表中的指针会导致内存泄漏
- 使用列表类和push_back的c++内存泄漏
- Push_backing到指针列表会导致内存泄漏
- 对象指针的C++静态列表,以及内存泄漏