当我运行我的程序时,它偶尔会崩溃并给我这个错误: “ 检测到glibc / pathtoexecutable:free():无效的下一个尺寸(快)”
回溯导致成员函数只调用向量的push_back函数 -
void Path::add(Position p) {path.push_back(p);}
我试过谷歌搜索错误,而绝大多数问题是人们分配的内存太少。但是怎么可能在std :: vector<> .push_back上发生?我可以检查什么?任何帮助表示赞赏。
答案 0 :(得分:8)
你可能在某处做了无效的写操作并且将glibc保存的控制信息丢弃用于簿记。因此,当它试图释放东西时,它会检测到异常情况(不合理的尺寸可以自由)。
这类事情最糟糕的是,问题并没有表现在你犯了真正错误的地步,所以很难抓住(这是一个非常常见的错误)
最好的办法是使用内存调试器。 valgrind
可能是一个开始(因为你提到了glibc)。在glibc消息之前查找“无效写入大小...”。
答案 1 :(得分:2)
正如@cniculat所说,试试valgrind。
您可以尝试的另一个工具是:
assert()
中止,因此您将在控制台上收到错误消息。malloc()
/ free()
。只需将您的appl链接到tcmalloc链接版本,它就可以检测到内存使用问题。STL调试支持和tcmalloc可以在调试版本中常规使用。这样你就可以像往常一样工作,而这些工具会在“后台”中断言你是否有错误。