首页 > 解决方案 > std::vector _M_start 和 _M_finish 相同

问题描述

std::vector在 GDB 中调试 a ,但我不知道向量认为它的当前大小是什么。向量被声明为std::vector<custom_struct_t *> myVec;

(gdb) p myVec.size()
Cannot evaluate function -- may be inlined

检查向量:

(gdb) p myVec
[...]
    _M_impl = {
      [...]
      _M_start = 0x8052a0500, 
      _M_finish = 0x8052a0500, 
      _M_end_of_storage = 0x8052a0600
    }
  }, <No data fields>}

在这里,我看到了_M_start并且_M_finish是相同的值。这是表示长度为零的向量还是长度为一长度的向量?

标签: c++vectorgdbstdvector

解决方案


对于 libstdc++ (gcc) 实现,这表示 0 大小的向量,如std::vector::size()函数所示:

size_type
size() const _GLIBCXX_NOEXCEPT
{ return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }

例如,可以在GCC 在线文档中找到此源代码。


推荐阅读