Я знаю, что есть множество вопросов с "* обнаружен glibc * free (): неверный указатель", но следующий пример является минималистским с 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 (нет учебника, нет примера с ptr_map). Похоже, в Интернете нет учебника boost :: ptr_map. У меня проблемы с получением значений и доступом к методам сопоставленных классов, которые я создал. Таким образом, я попытался создать самый простой пример, который только мог, но плохо стартовал, как показано выше.
Любая помощь с ошибкой glibc выше и с ptr_map в целом приветствуется. Спасибо.
Edit:
Я прочитал более 20 раз, изучил и скопировал примеры из официального урока повышения http://www.boost.org/doc/libs/1_46_0/libs/ptr_container/doc/tutorial.html
Как уже говорилось выше, урок по бусту почти не затрагивает ptr_map, поэтому ссылки на него не будут иметь никакого значения. По сути, я много раз проходил и изучал все руководство по контейнеру boost ptr.