二话不说,先贴代码:
#include <stdio.h>
int main()
{
int i = 0;
unsigned int *tmp = NULL;
unsigned int ip[10];
tmp = ip;
for (i = 0; i < 10; i++)
{
tmp += i;
*tmp = i;
}
for (i = 0; i < 10; i++)
{
printf("ip[%d] : %d\n", i, ip[i]);
}
return 0;
}
这个小代码,哪里有问题?!!!
相信聪明的你,已经看出了端倪!
先贴出结果:
ip[0] : 0
ip[1] : 1
ip[2] : 0
ip[3] : 2
ip[4] : 0
ip[5] : 0
ip[6] : 3
ip[7] : 0
ip[8] : 1396902848
ip[9] : 32767
看这个你应该就知道了吧:循环赋值有问题:
for (i = 0; i < 10; i++)
{
tmp += i;
*tmp = i;
}
//初看这个代码时,感觉没有问题啊,每次循环加i,然后把值赋给*tmp!
//但是仔细分析下,就会发现漏洞:
//每次循环时,tmp在变,i也在变,所以这样赋值是跳着赋值的。
其实单看这个代码,很容易发现问题,但是在工程中,有其他业务逻辑的时候,往往怀疑是业务方面的问题,忽略了这样的低级错误,导致浪费了不少时间!
所以遇到问题,一定要冷静分析思考:
1、理清业务逻辑关系
2、添加调试信息,仔细分析调试数据
3、跳出既定背景,多方位分析