[英]GDB wrong values for vector.size()
A simple vector.push_back() causes some error in my code: 一个简单的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;
}
I'm using GDB to check its behavior... and the weird thing is that stack.size() goes wrong after the second push_back(). 我正在使用GDB来检查其行为...而奇怪的是,第二个push_back()之后stack.size()出错了。 It becomes 467369971!
变成467369971! What may be wrong?
有什么问题吗? I'm on Win7 64-bit, and I'm using MinGW with G++ 4.7.0
我使用的是Win7 64位,并且使用的是MinGW和G ++ 4.7.0
Below is the output of GDB: 以下是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;
What may be wrong?
有什么问题吗?
It's a bug in your compiler, or in your GDB. 这是您的编译器或GDB中的错误。 It does not reproduce on Linux using
g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
and GDB 7.4: 在使用
g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
和GDB 7.4的Linux上不会重现:
(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
Unfortunately, figuring out which tool is to blame here will be somewhat hard: you'll need to examine the debuginfo generated. 不幸的是,要弄清楚应该归咎于哪个工具将有些困难:您将需要检查生成的debuginfo。 Instead you may try to reproduce the problem with different versions of GCC and GDB.
相反,您可以尝试使用不同版本的GCC和GDB重现该问题。 If varying GCC causes the bug to disappear, it's probably a bug in GCC.
如果变化的GCC导致该错误消失,则可能是GCC中的错误。 If varying GDB version makes the bug disappear, it's probably a GDB bug.
如果不同的GDB版本使该错误消失,则可能是GDB错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.