1、循环的限制条件在循环过程中变化
这个错误for一般是不会犯的,因为for的循环变量的变化主要在for的刮号中,限制条件也在其中。其它地方要用的话,最多就是用一下它的值而不会对它进行修改。
但是while循环的时候,循环变量的变化是在函数体中进行的,所以如果变化过了、稍不注意就会过头。
例如:
int pbeg[offset];
//初始化pbeg;乱序,
int *pend= pbeg + offset;
int *p = pbeg;
//找出正数中最小的;
int i = 0;
while(p != pend)
{
while(*p <= 0)++p;
//找出最小的正数数据。
if (i>*p) i = *p;
//对p作一些处理;
++p;
}
如果这个pbeg的最后几个数据正好是全是负数,那么就会数组越界了。
这段代码的错误就是在while中又大量的改变的循环变量。
一个办法,就是限制条件改为<或者>,而非!=。这样就可以解决了。
另外的办法就是老老实实的+1,不要用循环来改变循环变量!!!
while(p != pend)
{
if(*p<=0)
{
++p;
continue;
}
//找出最小的正数数据。
if (i>*p) i = *p;
//对p作一些处理;
++p;
}