2013-04-21 61 views
0

當我跨越第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}} 
+0

您在23行上看到什麼?垃圾或0? – stardust 2013-04-21 07:28:43

回答