gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:47:56 24 4
gpt4 key购买 nike

这让我很困惑。在我的类(class)声明中,我有两行:

std::multimap<int, int> commands;
std::multimap<std::string, std::string> config;

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

*** glibc detected *** ./antares: free(): invalid pointer: 0xb5ac1b64 ***

看起来很简单,只是它与后面如何处理这两个变量无关。我删除了其余代码中对变量的所有引用 - 仍然崩溃。我注释掉了其中一行 - 任何一行,程序运行没有问题。错误怎么可能不与任何一个特定变量有关?我假设 STL 中没有错误,但我已经想不出我的代码如何做到这一点。

这个问题让我很困惑,所以如果您能提供任何帮助,我将不胜感激。怀亚特

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

我的代码有几千行,所以不值得任何人花时间通读,我只是想找人给我指明正确的方向。

最佳答案

您假设问题不在 GCC 或 STL 中是正确的。但是,如果映射导致 free 错误,则您的其他代码可能是 stack smashing(或 heap smashing)。一个真正可怕的错误追逐。堆栈粉碎最糟糕的部分是破坏的对象不是有错误的对象。

这里有一些调试技巧。

  • valgrind 下运行应用.
  • 定义_GLIBCXX_DEBUG以启用STL调试
  • 添加 MALLOC_CHECK_=1 作为环境变量。这将为您提供更好的 malloc 错误消息。更多信息 here .
  • 在极少数情况下,我能够添加 memory watch到将被粉碎的位置。但很少有人能预测粉碎发生的位置。

关于C++ 定义两个 multimaps 导致程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3238845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com