gdb调试问题:在gdb调试步骤中看到的幻像值
问题描述:
当我跨越第22行时,仍然可以看到奇怪的值从y出现,这让我觉得y未正确初始化。但是当我再往前走2步时,返回线路的数量就变得正确了。gdb调试问题:在gdb调试步骤中看到的幻像值
这里发生了什么事?我试着关掉优化,但它不工作
1#include <iostream>
2#include <cstring>
3#include <cmath>
4using namespace std;
5
6const int MD = 10;
7struct BigNumber{
8 int digits[MD];
15 }
16
17 BigNumber(){
18 memset(digits, 0, sizeof(digits));
19 }
20
***21 BigNumber test(){
22 BigNumber p,c,y;// on this line , y is seen as garbage
23 p=c;// on this line , y is seen as garbage
24 c=y;
25 //y=p;
26 return y; // on this line, y returned to correct number
27=>}***
28
29
30 friend ostream& operator<<(ostream& out, const BigNumber& b);
31};
32
33ostream& operator<<(ostream& out, const BigNumber& b){
34 for(int i=MD-1; i>=0; i--){
35 out << b.digits[i];
36 }
37 return out;
38}
39
40
41
42int main(){
43 BigNumber l("4");
44 BigNumber r;
45 BigNumber p,c,y;
46
47 r=l.test();
48 cout << r << endl;
49 cout << l.test() << endl;
50 return 0;
51}
28
(gdb) p p
$8 = {digits = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}
(gdb) p c
$9 = {digits = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}
(gdb) p y
$10 = {digits = {1171907, 1235664, -1208027616, 1, 1, 0, 1, 134513360, 134520860, 0}}
(gdb) n
(gdb) n
(gdb) p y
$11 = {digits = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}
答
它可能会在编译器错误有关.... 我去用它,它开始抛出它的错误。 gdb error message: DW_OP_reg, DW_OP_piece, and DW_OP_bit_piece
我还必须明确指出,这不是由数组成员引起的,因为编译器应该为其成员元素明智地进行复制。 请参阅Default copy assignment with array members的确认
您在23行上看到什么?垃圾或0? – stardust 2013-04-21 07:28:43