stl_vector库中size_type的奇怪行为

时间:2018-11-26 05:32:25

标签: size overflow stdvector size-t

我正在尝试调试简单的向量推回操作。 只需执行一次后推操作,向量的大小就会从0变为很大的值。

我到了stl_vector库中的以下位置,回滚几乎完成了,我看到了:

  

(gdb)打印此-> _ M_impl._M_start

     
    

$ 36 =>(std :: _ Vector_base :: pointer)0x717910

  
     

(gdb)打印此-> _ M_impl._M_finish

     
    

$ 37 =(std :: _ Vector_base     :: pointer)0x7179f0(gdb)

  
     

(gdb)打印尺寸()

     
    

$ 38 = 9564978408590137876

  

我看到size函数已实现为:

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

当我在GDB中打印两个指针的差异时,我看到:

  

(gdb)打印(this-> _ M_impl._M_finish-this-> _ M_impl._M_start)

     
    

$ 40 = 1

  

我不明白,为什么size函数返回这么大的值。 有提示吗?

0 个答案:

没有答案