当在gdb中尝试调用std :: vector的push_back时,得到“尝试获取不在内存中的值的地址”

时间:2013-12-02 08:58:00

标签: stl gdb

我想在调试程序时通过gdb创建和模拟一些STL数据。

我在 gdb 中使用了以下命令来访问std :: vector的内存块,然后设置其分配器,最后调用“push_back”函数填写一个int号。 但是,gdb只是在调用push_back时向我显示了“尝试获取不在内存中的值的地址。”的消息。

请注意,我已经意识到“push_back”的参数是一个const引用。因此,我“ malloc ”在堆上编辑了一块内存来存储参数。

这是gdb调用:

(gdb) set $vect =  ('std::vector<int, std::allocator<int>>'*) malloc (sizeof('std::vector<int, std::allocator<int>>')) 
(gdb) set $alloc = ('std::allocator<int>'*)malloc(sizeof('std::allocator<int>'))
(gdb) set (std::allocator<int>)($vect->_M_impl) = *$alloc
(gdb) set $vect->_M_impl._M_start = 0  
(gdb) set $vect->_M_impl._M_finish = 0
(gdb) set $vect->_M_impl._M_end_of_storage = 0
(gdb) p *$vect
$21 = {<std::_Vector_base<int, std::allocator<int> >> = {
    _M_impl = {<std::allocator<int>> = {<__gnu_cxx::new_allocator<int>> = {<No data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>}
(gdb) set $num = (int*)malloc(sizeof(int))
(gdb) set *$num = 5             
(gdb) p *$num
$22 = 5
(gdb) call $vect->push_back(*$num)
Attempt to take address of value not located in memory.

gdb版本是7.6.1。

1 个答案:

答案 0 :(得分:0)

这只是gdb表达式求值程序中的一个错误。它位于某个地方的gdb bugzilla中(我认为最初使用std::string报告了一些测试用例)。