vector.size()的GDB错误值 [英] GDB wrong values for vector.size()

查看:190
本文介绍了vector.size()的GDB错误值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

简单的vector.push_back()在我的代码中导致一些错误:

A simple vector.push_back() causes some error in my code:

#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来检查它的行为......以及奇怪的事情是在第二个push_back()之后,stack.size()出错了。它变成了467369971!什么可能是错的?我在Win7 64位上,而且我使用MinGW和G ++ 4.7.0

I'm using GDB to check its behavior... and the weird thing is that stack.size() goes wrong after the second push_back(). It becomes 467369971! What may be wrong? I'm on Win7 64-bit, and I'm using MinGW with 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;


推荐答案


What may be wrong?

这是编译器或GDB中的错误。它使用 g ++(Ubuntu 4.4.3-4ubuntu5.1)4.4.3 和GDB 7.4在Linux上重现 b
$ b

It's a bug in your compiler, or in your GDB. It does not reproduce on Linux using g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3 and GDB 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版本使得这个bug消失,那可能是一个GDB的bug。

Unfortunately, figuring out which tool is to blame here will be somewhat hard: you'll need to examine the debuginfo generated. Instead you may try to reproduce the problem with different versions of GCC and GDB. If varying GCC causes the bug to disappear, it's probably a bug in GCC. If varying GDB version makes the bug disappear, it's probably a GDB bug.

这篇关于vector.size()的GDB错误值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆