GDB的奇怪行为

时间:2015-05-03 17:13:51

标签: c++ gdb

我一直在尝试调试一些小东西,并且在尝试这样做时几乎疯了。经过几个小时的解决问题后,我终于得到了一段代码,这是我问题的根源:

g++ -std=c++11 -ggdb -O0 -pedantic -Wall -Wextra -Wno-nonnull -fkeep-inline-functions

通过编译,使用:

(gdb) br 18
Breakpoint 1 at 0x40170c: file ./....cpp, line 18.
(gdb) r
Starting program: ...
[New Thread 15620.0x3c3c]

Breakpoint 1, main () at ./....cpp:18
18              cout << endl << foo.size() << endl << endl;
(gdb) p foo.size()
$1 = 4293588256
(gdb) c
Continuing.

4

[Inferior 1 (process 15620) exited normally]
(gdb)

然后我尝试以下方法:

int myArray[] = {1, 6, -1, 7, 83, 19, -3, 6, 2, 4, 6, 32, 66, -9};
int n = myArray.length;
myArray = doop(myArray);
for (int i = 0; i < n; i++) {
    System.out.println(myArray[i]);
}
}

private static int[] doop(int[] myArray) {
int n = myArray.length;
int swap;
for (int i = n - 1; i >= 0; i--) {
    int j = i;
    int min = myArray[i];
    while ((j > 0) && (myArray[j - 1] < min)) {
        myArray[j] = myArray[j - 1];
        j = j - 1;
       myArray[j] = min;
    }

}
return myArray;
}

实际上,4现在等于4293588256。到底是怎么回事? 另外,如果我在创建堆栈之前中断程序,GDB会正确显示大小。

编辑: 我在Windows 8.1上,版本的东西是:G ++ 4.8.1; GDB 7.6.1

1 个答案:

答案 0 :(得分:3)

事实证明这确实是GDB 7.6.1或G ++ 4.8.1的问题。 将GDB更新到7.8.1并将G ++更新到4.9.2版解决了这个问题。