当检查由分段错误生成的核心文件中的信息时,我注意到崩溃的原因是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); }
表示大小为“负”。因此,难怪它会崩溃,但是我不知道为什么会这样?这种行为可能是什么原因?我已经仔细检查过了,我不会尝试将损坏的或旧的库文件链接在一起。
向量的值类型包含一个并集,但是当我打印它时,它的数据似乎是正确的。您有任何想法如何进一步进行调试吗?