[英]GDB wrong values for vector.size()
一個簡單的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來檢查其行為...而奇怪的是,第二個push_back()之后stack.size()出錯了。 變成467369971! 有什么問題嗎? 我使用的是Win7 64位,並且使用的是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中的錯誤。 在使用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
不幸的是,要弄清楚應該歸咎於哪個工具將有些困難:您將需要檢查生成的debuginfo。 相反,您可以嘗試使用不同版本的GCC和GDB重現該問題。 如果變化的GCC導致該錯誤消失,則可能是GCC中的錯誤。 如果不同的GDB版本使該錯誤消失,則可能是GDB錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.