2011-04-28 60 views
0

我知道有幾十個問題用「* 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集裝箱手冊多次。

回答