我知道有幾十個問題用「* glibc檢測到* free():invalid pointer」,但以下是一個極簡主義例子與升壓:: ptr_map:glibc detected:free():invalid pointer:with simple 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..
它已經反覆出現,使這種錯誤造成試圖刪除無效的指針時。但是,上述非常簡單的代碼中的哪些更改會避免此錯誤?
這個問題的背景是,我很努力去理解boost :: ptr_map的正確用法。不幸的是,就ptr_map而言,官方的boost文檔非常稀少(沒有教程,也沒有ptr_map的示例)。網上似乎沒有boost :: ptr_map教程。我在檢索值和訪問我創建的映射類的方法時遇到問題。因此,我試圖創造一個我能做到的最簡單的例子,但是如上面所證明的那樣,在一個糟糕的開局中取得了成功。
任何幫助上面的glibc錯誤和普遍ptr_map是讚賞。謝謝。
編輯: 我已閱讀過20次,研究並複製從官方升壓教程http://www.boost.org/doc/libs/1_46_0/libs/ptr_container/doc/tutorial.html 如上所述的例子中,增強教程僅夠ptr_map,所以鏈接到它不會使差的任何一點。基本上,我已經經歷了整個boost ptr集裝箱手冊多次。