gcc std :: vector _M_start大于_M_Finish

时间:2019-07-25 16:02:59

标签: c++ gcc gdb stdvector

当检查由分段错误生成的核心文件中的信息时,我注意到崩溃的原因是std :: vector试图将地址为0x1的对象放置到位。

它看起来像这样:

print myvec
$1 = [...] = {
    _M_impl = {<std::allocator<Action>> = [...], _M_start = 0x60, _M_finish = 0x1, _M_end_of_storage = 0x31}}, <No data fields>}

我注意到的是_M_start比_M_finish大,这根本没有意义,因为向量的大小计算为

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

表示大小为“负”。因此,难怪它会崩溃,但是我不知道为什么会这样?这种行为可能是什么原因?我已经仔细检查过了,我不会尝试将损坏的或旧的库文件链接在一起。

向量的值类型包含一个并集,但是当我打印它时,它的数据似乎是正确的。您有任何想法如何进一步进行调试吗?

0 个答案:

没有答案