最近在练习一个项目的时候经常遇到数组被corrupt的问题,在解决之后都发现是数组的访问越界。
现在发现的有两种情况,前越界和后越界。
前越界的情况:
void DeleteChar(char *Buff)
{
int i = 0;
i = strlen(Buff);
if (i == 0)................................1
{
return;
}...............................................2
if (*(Buff+i-1) > 0xFFFFFFA0)//最后一个字为汉字
{
*(Buff+i-1) = 0x00;
*(Buff+i-2) = 0x00;
}
else
{
*(Buff+i-1) = 0x00;
}
}
这个函数的作用是删除传进来的字符数组的最后一个字符,汉字或者ASC字符。上面的1和2之间的代码之前没有加,导致传进来的数组长度为0时还进行删除,发生越界,提示变量被Corrupt。
后越界的情况:
比如定义一个char cChar[3]; 但是在使用的时候给它输入3个或者3个以上的字符,则会发生越界问题!
此类的提示错误语为:Stack around the variable “xx” was corrupted