我知道有很多问题与“ * glibc detected * free(): invalid pointer”有关,但以下是 boost::ptr_map 的极简示例:
#include <boost/ptr_container/ptr_map.hpp>
#include <string>
int main() {
boost::ptr_map<std::string, int> map;
int one = 1;
int* pone = &one;
string un = "one";
map.insert(un, pone);
}
代码编译,但在运行时:
boost.library/ptr_container $ ./run.ptrmap
*** glibc detected *** ./run.ptrmap: free(): invalid pointer: 0x00007ffffd5c4578 ***
======= Backtrace: =========
/lib/libc.so.6[0x7fd5e99202f6]
/lib/libc.so.6(cfree+0x6c)[0x7fd5e9924c6c]
./run.ptrmap[0x401066]
/lib/libc.so.6(__libc_start_main+0xfd)[0x7fd5e98c8abd]
./run.ptrmap[0x400e79]
======= Memory map: ========
etc..
在整个 SO 中重复出现这种错误是在尝试删除无效指针时引起的。但是,上面非常简单的代码中的哪些更改可以避免此错误?
这个问题的背景是我正在努力理解 boost::ptr_map 的正确用法。不幸的是,就 ptr_map 而言,官方的 boost 文档非常稀疏(没有教程,没有 ptr_map 的示例)。网络上似乎没有 boost::ptr_map 教程。我在检索值和访问我创建的映射类的方法时遇到问题。因此,我试图创建一个我能做到的最简单的例子,但正如上面所证明的那样,起步很糟糕。
对上述 glibc 错误和一般 ptr_map 的任何帮助表示赞赏。谢谢。
编辑:我已经阅读了 20 多次,研究并复制了官方 boost 教程中的示例http://www.boost.org/doc/libs/1_46_0/libs/ptr_container/doc/tutorial.html 如上所述,boost本教程几乎没有涵盖 ptr_map,因此链接到它不会有任何区别。基本上,我已经多次通读了整个 boost ptr 容器手册。