我正在使用visual studio 2013 Ultimate,当我逐步调试调试器的代码时,我遇到了问题。我在这里找到了2篇关于堆栈溢出的文章,但它们都没有解决我的问题。
auto it = m_actorComponents.begin();
while (it != m_actorComponents.end())
{
delete it->second;
it->second = nullptr;
it = m_actorComponents.erase(it);
}
在上面的代码段中,例如,当我尝试单步执行它进入循环然后执行删除行,然后跳转到擦除行,然后跳转到nullptr行。它为每次迭代重复此模式。代码的某些不同部分似乎偶尔会跳转。在此之前,我正在使用Profile Guided Optimization,因此我认为它与此有关,但无法弄清楚如何解决它。我已经清理并重建了解决方案,删除了调试和发布文件夹等。有谁知道如何关闭它,因为它很难弄清楚发生了什么。
另一方面,我正在使用_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);检查内存泄漏。程序退出时没有,但每次我在运行时重新加载游戏级别时帧速率下降。如果我继续重装,我甚至可以降到4 FPS,它会坐在那里。对我来说,这意味着在级别加载时存在内存泄漏,在程序退出时以某种方式清除。任何人都有任何关于如何在运行时跟踪此C ++内存使用情况或任何良好的分析工具的想法?