GDB неверные значения для vector.size ()

Простой vector.push_back () вызывает некоторые ошибки в моем коде:

#include <vector>
using namespace std;

int main(int argc, const char *argv[])
{
vector<unsigned> stack;
stack.push_back(1);
stack.push_back(1); //stack.size() becomes 467369971 after this
stack.push_back(1);
stack.push_back(1);
... more push_back()s ...
return 0;
}

Я использую GDB для проверки его поведения … и странная вещь в том, что stack.size () идет не так после второго push_back (). Становится 467369971! Что может быть не так? Я нахожусь на 64-битной Win7, и я использую MinGW с G ++ 4.7.0

Ниже приведен вывод GDB:

(gdb) n
5                       std::vector<unsigned> sta
(gdb) n
6                       stack.push_back(1);
(gdb) display stack.size()
1: stack.size() = 0
(gdb) n
7                       stack.push_back(1);
1: stack.size() = 1
(gdb)
8                       stack.push_back(1);
1: stack.size() = 467369971 //goes wrong here
(gdb)
9                       stack.push_back(1);
1: stack.size() = 467369971
(gdb)
10                      stack.push_back(1);
1: stack.size() = 4         // gets "normal"(gdb)
11                      stack.push_back(1);
1: stack.size() = 467369971 // wrong again
(gdb)
12                      stack.push_back(1);
1: stack.size() = 6
(gdb)
13                      stack.push_back(1);
1: stack.size() = 7
(gdb)
14                      stack.push_back(1);
1: stack.size() = 8
(gdb)
15                      stack.push_back(1);
1: stack.size() = 467369971
(gdb)
16                      stack.push_back(1);
1: stack.size() = 10
(gdb)
17                      stack.push_back(1);
1: stack.size() = 11
(gdb)
18                      stack.push_back(1);
1: stack.size() = 12
(gdb)
19                      return 0;

4

Решение

Что может быть не так?

Это ошибка в вашем компиляторе или в вашей GDB. Оно делает не воспроизвести на Linux с помощью g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3 и ГБД 7.4:

(gdb) n
7       stack.push_back(1);
1: stack.size() = 0
(gdb)
8       stack.push_back(1); //stack.size() becomes 467369971 after this
1: stack.size() = 1
(gdb)
9       stack.push_back(1);
1: stack.size() = 2
(gdb)
10      stack.push_back(1);
1: stack.size() = 3
(gdb)
11      stack.push_back(1);
1: stack.size() = 4
(gdb)
12      stack.push_back(1); //stack.size() becomes 467369971 after this
1: stack.size() = 5
(gdb)
13      stack.push_back(1);
1: stack.size() = 6
(gdb)
14      stack.push_back(1);
1: stack.size() = 7
(gdb)
15      return 0;
1: stack.size() = 8
(gdb)
16  }
(gdb) q

К сожалению, выяснить, какой инструмент здесь виноват, будет довольно сложно: вам нужно изучить сгенерированный debuginfo. Вместо этого вы можете попытаться воспроизвести проблему с различными версиями GCC и GDB. Если изменение GCC приводит к исчезновению ошибки, это, вероятно, ошибка в GCC. Если в результате изменения версии GDB ошибка исчезла, это, вероятно, ошибка GDB.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]