我正在使用Visual Leak Detector来检测内存泄漏,并且在以下行中遇到了许多内存泄漏事件:
class SomeClass
{
// ...
std::map<long,long> some_map;
void func(long a_long, long b_long)
{
some_map[a_long] = b_long; // here be a memory leak
}
}
这怎么可能?这里没有指针,没有对象实例化。
这可能是内存泄漏导致程序因其他原因而崩溃的副作用吗?程序崩溃或退出(1)会导致地图不被彻底破坏吗?
答案 0 :(得分:8)
你在这里发布的代码非常好,不应该造成任何泄密,所以有一些可能的罪魁祸首:
map
析构函数(或任何对象析构函数),这肯定会导致内存泄漏。答案 1 :(得分:4)
那里没有内存泄漏,但有实例化。
当您插入地图时,它需要在其树中创建一个新节点(地图通常是red-black tree)。通常,映射将为每次插入分配动态内存,这对于基本类型,用户定义类型或指针也没有区别。