Простой 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;
Что может быть не так?
Это ошибка в вашем компиляторе или в вашей 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.
Других решений пока нет …