C之变量初始化的重要性

#include <stdio.h>

int add_range(int low, int high)
{
int i, sum;
for (i = low; i <= high; i++)
sum = sum + i;
return sum;
}

int main(void)
{
int result[100];
result[0] = add_range(1, 10);
result[1] = add_range(1, 100);
printf("result[0]=%d result[1]=%d ", result[0], result[1]);
return 0;
}

  1 root@ubuntu:/opt/liuzw# gdb ./test
  2 GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
  3 Copyright (C) 2012 Free Software Foundation, Inc.
  4 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
  5 This is free software: you are free to change and redistribute it.
  6 There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
  7 and "show warranty" for details.
  8 This GDB was configured as "i686-linux-gnu".
  9 For bug reporting instructions, please see:
 10 <http://bugs.launchpad.net/gdb-linaro/>...
 11 Reading symbols from /opt/liuzw/test...done.
 12 (gdb) i locals                                
 13 No frame selected.                         //没有变量
 14 (gdb) n
 15 The program is not being run.            //没有开始直接下一步是不对的
 16 (gdb) start
 17 Temporary breakpoint 1 at 0x8048415: file test.c, line 14.
 18 Starting program: /opt/liuzw/test 
 19 
 20 Temporary breakpoint 1, main () at test.c:14
 21 14        result[0] = add_range(1, 10);    //开始运行程序,经过定义变量,执行了第一条语句
 22 (gdb) i locals                                
 23 result = {-1208188928, 2, 134513196, -1207960576, -1207963660, -1207963660, -1209922512, 1, -1208104168, -1208058708, 0, 0, 0, 0, 0, 
 24   0, 0, -1208104168, 0, 0, 0, 3, -163754450, 1011, 0, -1209886408, -1207959944, -1207984804, -1209921992, 0, 38, -1209734771, 0, 0, 1, 
 25   2224, -1208104120, -1208104872, 134513228, -1209884328, 134513148, 1, -1209313744, -1209313186, -1073745400, -1207963660, 
 26   -1207960880, -1073745164, -1073745232, -1208058151, -1073745264, 134513148, -1073745288, -1207960972, 0, -1208104120, 1, 0, 1, 
 27   -1207961320, 0, 0, 0, -1208205324, -1073745298, -1073745297, 1, -1209312327, -1073745297, -1073745298, 0, -1208008724, -1073745164, 
 28   0, 0, -1209728909, 134513228, 0, 12648448, 1, -1073744675, 47, -1073745220, -1208205324, 134513776, 134520820, 1, 134513373, 
 29   -1208204316, 13, 134520820, 134513809, -1, -1209728570, -1208205324, -1209728427, -1208036736, 0, 134513785, -1208205324}   
 30                                                 //整形数组定义未初始化,内容为内存中随机值
 31 (gdb) s    
 32 add_range (low=1, high=10) at test.c:6
 33 6        for (i = low; i <= high; i++)     //带跳转函数的下一步命令:执行到第一条函数调用处,并执行了子函数经过变量定义后的第一条语句
 34 (gdb) i locals 
 35 i = 0                                            //查看当前变量值,i因为被形参low赋值0所以为有效值,sum因为没有被初始化,值为内存中随机数
 36 sum = -1208060323
 37 (gdb) n    
 38 7            sum = sum + i;                //不跳转函数的下一步命令:执行了累计和函数
 39 (gdb) i locals 
 40 i = 1                                            //经过累计和函数后,i变量执行到i++,所以增加1为1
 41 sum = -1208060323                         //经过累计和函数后因为sum = -1208060323、i=0,累加赋值sum还是-1208060323
 42 (gdb) n   
 43 6        for (i = low; i <= high; i++)    //不跳转函数的下一步命令,执行了for函数判断
 44 (gdb) i locals  
 45 i = 1                                            //i由于被for一轮循环后的i++已经增为1
 46 sum = -1208060322                        //sum经过+i,已经从-1208060323增大到-1208060322
 47 (gdb) n                                        
 48 7            sum = sum + i;
 49 (gdb) i locals
 50 i = 2                                            //经过累计和函数后,i变量执行到i++,所以增加1为2
 51 sum = -1208060322
 52 (gdb) n
 53 6        for (i = low; i <= high; i++)
 54 (gdb) i locals 
 55 i = 2                                            //经过累计和函数后因为sum = -1208060322、i=2,累加赋值sum为-1208060320
 56 sum = -1208060320
 57 (gdb) n
 58 7            sum = sum + i;
 59 (gdb) i locals 
 60 i = 3                                            //经过累计和函数后,i变量执行到i++,所以增加1为3,因为还没有继续累加,保持sum = -1208060320
 61 sum = -1208060320
 62 (gdb) n
 63 6        for (i = low; i <= high; i++)
 64 (gdb) i locals 
 65 i = 3                                            //经过累计和函数后因为sum = -1208060320、i=3,累加赋值sum为-1208060317
 66 sum = -1208060317
 67 (gdb) n
 68 7            sum = sum + i;
 69 (gdb) i locals
 70 i = 4
 71 sum = -1208060317
 72 (gdb) n
 73 6        for (i = low; i <= high; i++)
 74 (gdb) i locals
 75 i = 4
 76 sum = -1208060313
 77 (gdb) n
 78 7            sum = sum + i;
 79 (gdb) i locals
 80 i = 5
 81 sum = -1208060313
 82 (gdb) n
 83 6        for (i = low; i <= high; i++)
 84 (gdb) i locals
 85 i = 5
 86 sum = -1208060308
 87 (gdb) n
 88 7            sum = sum + i;
 89 (gdb) i locals
 90 i = 6
 91 sum = -1208060308
 92 (gdb) n
 93 6        for (i = low; i <= high; i++)
 94 (gdb) i locals
 95 i = 6
 96 sum = -1208060302
 97 (gdb) n
 98 7            sum = sum + i;
 99 (gdb) i locals
100 i = 7
101 sum = -1208060302
102 (gdb) n
103 6        for (i = low; i <= high; i++)
104 (gdb) i locals
105 i = 7
106 sum = -1208060295
107 (gdb) n
108 7            sum = sum + i;
109 (gdb) i locals
110 i = 8
111 sum = -1208060295
112 (gdb) n
113 6        for (i = low; i <= high; i++)
114 (gdb) i locals
115 i = 8
116 sum = -1208060287
117 (gdb) n
118 7            sum = sum + i;
119 (gdb) i locals
120 i = 9
121 sum = -1208060287
122 (gdb) n
123 6        for (i = low; i <= high; i++)
124 (gdb) i locals
125 i = 9
126 sum = -1208060278
127 (gdb) n
128 7            sum = sum + i;
129 (gdb) i locals
130 i = 10
131 sum = -1208060278
132 (gdb) n                                
133 6        for (i = low; i <= high; i++)    //执行了for判断
134 (gdb) i locals                        
135 i = 10                                        //判断后达成,此时值sum继续累加10
136 sum = -1208060268
137 (gdb) n                                        
138 8        return sum;                            //执行了子函数返回
139 (gdb) i locals
140 i = 11
141 sum = -1208060268
142 (gdb) n
143 9    }
144 (gdb) i locals
145 i = 11
146 sum = -1208060268
147 (gdb) n                                //下一个函数调用处,此处整形数组为未初始化
148 main () at test.c:15
149 15        result[1] = add_range(1, 100);
150 (gdb) i locals
151 result = {-1208060268, 2, 134513196, -1207960576, -1207963660, -1207963660, -1209922512, 1, -1208104168, -1208058708, 0, 0, 0, 0, 0, 
152   0, 0, -1208104168, 0, 0, 0, 3, -163754450, 1011, 0, -1209886408, -1207959944, -1207984804, -1209921992, 0, 38, -1209734771, 0, 0, 1, 
153   2224, -1208104120, -1208104872, 134513228, -1209884328, 134513148, 1, -1209313744, -1209313186, -1073745400, -1207963660, 
154   -1207960880, -1073745164, -1073745232, -1208058151, -1073745264, 134513148, -1073745288, -1207960972, 0, -1208104120, 1, 0, 1, 
155   -1207961320, 0, 0, 0, -1208205324, -1073745298, -1073745297, 1, -1209312327, -1073745297, -1073745298, 0, -1208008724, -1073745164, 
156   0, 0, -1209728909, 134513228, 0, 12648448, 1, -1073744675, 47, -1073745220, -1208205324, 134513776, 134520820, 1, 134513373, 
157   -1208204316, 13, 134520820, 134513809, -1, -1209728570, -1208205324, -1209728427, -1208036736, 0, 134513785, -1208205324}
158 (gdb) s
159 add_range (low=1, high=100) at test.c:6
160 6        for (i = low; i <= high; i++)
161 (gdb) i locals
162 i = 11
163 sum = -1208060268
164 (gdb) n
165 7            sum = sum + i;
166 (gdb) i locals
167 i = 1
168 sum = -1208060268
169 (gdb) n
170 6        for (i = low; i <= high; i++)
171 (gdb) i locals
172 i = 1
173 sum = -1208060267
174 (gdb) n
175 7            sum = sum + i;
176 (gdb) i locals
177 i = 2
178 sum = -1208060267
179 (gdb) s
180 6        for (i = low; i <= high; i++)
181 (gdb) i locals
182 i = 2
183 sum = -1208060265
184 (gdb) s
185 7            sum = sum + i;
186 (gdb) i locals
187 i = 3
188 sum = -1208060265
189 (gdb) quit
190                     
gdb调试
原文地址:https://www.cnblogs.com/pokerface/p/6650293.html