Странное поведение size_type в библиотеке stl_vector - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь отладить простую векторную операцию возврата.Размер вектора изменяется от 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

Я не могу понять, почему функция размера возвращает такое большое значение.Есть подсказки?

...