定义两个multimaps的C++会导致程序崩溃

wya*_*att 2 c++ stl multimap

这让我完全不知所措.在我的课堂宣言中,我有两行:

std::multimap<int, int> commands;
std::multimap<std::string, std::string> config;
Run Code Online (Sandbox Code Playgroud)

代码编译没有问题,但是当我运行它时,我收到以下错误:

*** glibc detected *** ./antares: free(): invalid pointer: 0xb5ac1b64 ***
Run Code Online (Sandbox Code Playgroud)

看起来很简单,除了它与以后如何处理这两个变量无关.我删除了其余代码中的所有引用到变量 - 仍然崩溃.我评论了其中一行 - 任何一行,程序运行没有问题.如何将错误与特定变量无关?我的工作是假设STL中没有错误,但我已经没有关于我的代码可能如何做到这一点的想法.

这个让我难过,所以我很感激你能提供的任何帮助.悦

编辑:我不是说STL有问题,那只是我有点油腻.我知道这个bug存在于我的代码中,我想知道的是 - 声明一个未引用的变量会导致它崩溃可能是错误的吗?为什么这会影响我的代码呢?

我的代码是几千行,所以不值得任何人阅读它的时间,我只是想找人指点我正确的方向.

def*_*ode 7

你认为问题不在GCC或STL中是正确的.但是,如果映射导致free错误,则您的其他代码可能是堆栈粉碎(或堆粉碎).追逐真正可怕的虫子.关于堆栈粉碎的最糟糕的部分是破坏的对象不是bug的对象.

这是一些调试技巧.

  • valgrind下运行应用程序.
  • define _GLIBCXX_DEBUG以启用stl调试
  • 添加MALLOC_CHECK_=1为环境变量.这将为您提供更好的malloc错误消息.更多信息在这里.
  • 在极少数情况下,我能够将记忆手表添加到将被粉碎的位置.但是,当您可以预测粉碎将在何处发生时,这种情况很少见.