简体   繁体   English

GDB vector.size()的值错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM