Ada*_*oss 2 c++ memory-leaks stl
我发现在我的应用程序中某处存在内存泄漏,但我一直在缩小范围.我已尝试_CrtDumpMemoryLeaks按照此示例中的说明使用该函数,但它不显示文件名.因此,我一直在尝试通过在各个点放置对此转储函数的调用来找到内存泄漏的第一点(因为根据输出似乎有很多).似乎我很早就在我的构造函数中为对象提供了很多它们.
经过进一步研究,我似乎正在获得定义,std::unordered_map即使只是声明一个局部变量的简单主函数有内存泄漏.
例如,以下代码会产生内存泄漏:
void main()
{
_CrtDumpMemoryLeaks(); // executing this line, no memeory leaks found
std::unordered_map<int, int> intMap;
_CrtDumpMemoryLeaks(); // executing this line, memeory leaks found
}
Run Code Online (Sandbox Code Playgroud)
我在这一点上完全感到困惑,并且觉得追逐这个并不能帮助我找到我最初注意到的内存泄漏.
很感谢任何形式的帮助.
所以你期望std::unordered_map<T>在你坚持一个物体的时候没有任何记忆?这似乎是一个不合理的假设!至少,你应该销毁你创建的对象:
int main()
{
_CrtDumpMemoryLeaks(); // executing this line, no memeory leaks found
{
std::unordered_map<int, int> intMap;
}
_CrtDumpMemoryLeaks(); // executing this line, memeory leaks found
}
Run Code Online (Sandbox Code Playgroud)
我不知道这是否会释放所有内存,但它有更好的机会.标准C++库仍然可以在其内存分配机制中保留一些内存.
除了"已经分配但尚未释放的内存"之外,内存泄漏的定义是什么?
如果unordered_map构造函数在内部分配任何内存,那么你就有了"泄漏".尝试将其放在自己的范围内,看看是否得到相同的结果.