文档介绍:C 十大低级错误
10个编码致命低级错误代码案例内部公开
C++十大低级错误
1.
2.
3.
4.
5.
6.
7.
8.
’\0’判断无符号数是否小于0循环变量数据类型太小循环体内改写循环变量混淆”==”与”=”函数局部变量或参数过大,堆栈溢出数据类型不一致,变量或参数赋值出错
:
(1)数组下标根据计算得出
i=a–b;array[i]=0;//使用前应该检查i的合法性(2)数组下标通过函数得出
voidmain(){inti,b[10];1
getIndex(&i);
}b[i]=0;//使用前应该检查i的合法性(3)数组下标是循环变量
voidmain(){inti,max,b[10];getMax(&max);
2016-12-26华为机密,未经许可不得扩散
10个编码致命低级错误代码案例for(i=0;i<max;i++)//使用前应该检查max的合法性{b[i]=0;}内部公开
}
(1)使用未分配空间的指针
voidfunc(){char*p;if(NULL!=p){printf(“%s”,p);}}(2)内存空间释放后指针未置Null,内存指针仍被继续使用void*g_pBuf=NULL;voidATM_CellRecv(U8*pBuf,U32ulLen){g_pBuf=pBuf;//g_pBuf通过pBuf赋值指向内存区域......if(NULL!=pBuf){
}free(pBuf);//只是释放了内存,而g_pBuf并没有置成NULL.}
’\0’voidfun(){chardest[10];charsrc[]="0123456789";memcpy(dest,src,sizeof(src));}
10个编码致命低级错误代码案例//c赋值为具体的循环次数while(c-->=0){//dosomething…}内部公开
;unsignedshorts;//dosomething//s>255for(c=0;c<s;c++){//dosomething}
unsignedlongi;for(i=0;i<1024;c++){for(i=0;i<512;c++){//dosomething}}“=”与“==”
如下例子的循环判断条件中,将”==”误写成”=”,导致死循环。
Boolresult=True;while(result=True){result=execFunc();wait();}
编程规范要求将常量写在等号左边(如“True==result”),确保编译时即可发现错误。
2016-12-26华为机密,未经许可不得扩散
10个编码致命低级错误代码案例内部公开
,堆栈溢出voidFunction(void){charb[0x20