GDB wrong values for vector.size()(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 来检查它的行为……奇怪的是 stack.size() 在第二个 push_back() 之后出错了.变成467369971!可能有什么问题?我在 Win7 64 位上,我正在使用带有 G++ 4.7.0 的 MinGW
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 的输出:
Below is the output of 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 上重现:
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
不幸的是,要找出应该归咎于哪个工具会有些困难:您需要检查生成的调试信息.相反,您可以尝试使用不同版本的 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 值错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:vector.size() 的 GDB 值错误
基础教程推荐
- 设计字符串本地化的最佳方法 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17