Incorrect GDB Values ​​for vector.size ()

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; } 

I use GDB to test its behavior ... and it is strange that stack.size () goes wrong after the second push_back (). It will be 467369971! What could be wrong? I'm on Win7 64-bit and I'm using MinGW with g ++ 4.7.0

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; 
+4
source share
1 answer

What could be wrong?

This is a bug in your compiler or in your GDB. It does not play 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 

Unfortunately, figuring out which tool is to blame here will be somewhat difficult: you will need to examine the generated debuginfo. Instead, you can try to reproduce the issue with different versions of GCC and GDB. If a change in GCC causes the error to disappear, it is probably an error in the GCC. If changing the version of GDB causes the error to disappear, it is probably a GDB error.

+1
source

Source: https://habr.com/ru/post/1434327/


All Articles