Я пытаюсь отладить простую векторную операцию возврата.Размер вектора изменяется от 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() const _GLIBCXX_NOEXCEPT
{ return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
И когда я печатаю разницу двухуказатели в GDB, я вижу:
(gdb) print (this -> _ M_impl._M_finish - this -> _ M_impl._M_start)
$ 40 = 1
Я не могу понять, почему функция размера возвращает такое большое значение.Есть подсказки?