还帮看看这个问题!

时间:2022-01-20 19:18:02
unsigned char str1[4];
int ci;
for(ci=0;ci<4;ci+=2)
{
  str1[ci]=0xff;
  str1[ci+1]=0xff;
}
PC-lint检查,就会报告警possible access of out-of-bounds pointer(1 beyond end of data)by operator '['.
是否是最后一个位置没有'\0'结束符号了呢?
请指教,如果要修改,该怎么办呢

12 个解决方案

#1


PC-lint这么严格阿
不太清楚怎么改

另外我觉得你可以用
memset( str1, 0xFF, sizeof( str1 ) );

#2


数组有越界?

#3


没有错啊,这跟"\0"没关系啊

#4


明显的越界嘛……

当ci == 3的时候,ci + 1 == 4,这个不是显然的越界么?

#5


数组越界
for(ci=0;ci<4;ci++)
{
  str1[ci]=0xff;
}

#6


而且pc-lint都告诉你是越界了一个字节了……

你把str定义为char[5]就没问题了

#7


不大清楚怎么改,但是我觉得不是“最后一个位置没有'\0'结束符号”的原因,因为只有字符串才要结束符号,而你的是字符型数组所以不需要结束符。
另外个人分析由于你定义的是unsigned char 型数组,在内存只占一个字节,所以它的范围应该是0---255;
你赋值的时候给的是0xff也就是最后一位,而警告提示:通过'['操作符指针(超出1最后数据)禁止访问。
你换换0----255以内的数据可能就没有警告。

#8


数组根本没有越界,ci的取值是0和2,没有越过ci+1。就楼主的代码来看,没有问题,问题可能在其它地方。

#9


一不小心想当然了……以为是ci++了……看错……

应该在其他地方有错误

#10


str1[ci]只有一个char的内存空间,能放得下0xff吗?
汗!

#11


possible access of out-of-bounds pointer(1 beyond end of data)by operator '['.
外面的指针范围禁止超过指示器(1 的超过数据结束范围)的操做范围

好象就是越界的意识

#12


str1[ci]当然可以放的下0xff,unsigned char占用1个字节,所以它的最大值可以到2的8次方。
所以当然可以放的下0xff,肯定不是0xff导致的。
可能是str1[ci+1],ci+1,这个值导致PC-LINT发了告警的。

#1


PC-lint这么严格阿
不太清楚怎么改

另外我觉得你可以用
memset( str1, 0xFF, sizeof( str1 ) );

#2


数组有越界?

#3


没有错啊,这跟"\0"没关系啊

#4


明显的越界嘛……

当ci == 3的时候,ci + 1 == 4,这个不是显然的越界么?

#5


数组越界
for(ci=0;ci<4;ci++)
{
  str1[ci]=0xff;
}

#6


而且pc-lint都告诉你是越界了一个字节了……

你把str定义为char[5]就没问题了

#7


不大清楚怎么改,但是我觉得不是“最后一个位置没有'\0'结束符号”的原因,因为只有字符串才要结束符号,而你的是字符型数组所以不需要结束符。
另外个人分析由于你定义的是unsigned char 型数组,在内存只占一个字节,所以它的范围应该是0---255;
你赋值的时候给的是0xff也就是最后一位,而警告提示:通过'['操作符指针(超出1最后数据)禁止访问。
你换换0----255以内的数据可能就没有警告。

#8


数组根本没有越界,ci的取值是0和2,没有越过ci+1。就楼主的代码来看,没有问题,问题可能在其它地方。

#9


一不小心想当然了……以为是ci++了……看错……

应该在其他地方有错误

#10


str1[ci]只有一个char的内存空间,能放得下0xff吗?
汗!

#11


possible access of out-of-bounds pointer(1 beyond end of data)by operator '['.
外面的指针范围禁止超过指示器(1 的超过数据结束范围)的操做范围

好象就是越界的意识

#12


str1[ci]当然可以放的下0xff,unsigned char占用1个字节,所以它的最大值可以到2的8次方。
所以当然可以放的下0xff,肯定不是0xff导致的。
可能是str1[ci+1],ci+1,这个值导致PC-LINT发了告警的。