4

単純な 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を使用してその動作をチェックしています...そして奇妙なことは、2番目のpush_back()の後にstack.size()がうまくいかないことです。467369971になります!何が間違っている可能性がありますか?私は Win7 64 ビットを使用しており、G++ 4.7.0 で MinGW を使用しています。

以下は、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;
4

1 に答える 1

4

何が間違っている可能性がありますか?

これは、コンパイラまたは GDB のバグです。GDB 7.4を使用する Linux では再現しません。g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3

(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 のバグです。

于 2012-09-15T23:22:31.507 に答える