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 ) );
不太清楚怎么改
另外我觉得你可以用
memset( str1, 0xFF, sizeof( str1 ) );
#2
数组有越界?
#3
没有错啊,这跟"\0"没关系啊
#4
明显的越界嘛……
当ci == 3的时候,ci + 1 == 4,这个不是显然的越界么?
当ci == 3的时候,ci + 1 == 4,这个不是显然的越界么?
#5
数组越界
for(ci=0;ci<4;ci++)
{
str1[ci]=0xff;
}
for(ci=0;ci<4;ci++)
{
str1[ci]=0xff;
}
#6
而且pc-lint都告诉你是越界了一个字节了……
你把str定义为char[5]就没问题了
你把str定义为char[5]就没问题了
#7
不大清楚怎么改,但是我觉得不是“最后一个位置没有'\0'结束符号”的原因,因为只有字符串才要结束符号,而你的是字符型数组所以不需要结束符。
另外个人分析由于你定义的是unsigned char 型数组,在内存只占一个字节,所以它的范围应该是0---255;
你赋值的时候给的是0xff也就是最后一位,而警告提示:通过'['操作符指针(超出1最后数据)禁止访问。
你换换0----255以内的数据可能就没有警告。
另外个人分析由于你定义的是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 的超过数据结束范围)的操做范围
好象就是越界的意识
外面的指针范围禁止超过指示器(1 的超过数据结束范围)的操做范围
好象就是越界的意识
#12
str1[ci]当然可以放的下0xff,unsigned char占用1个字节,所以它的最大值可以到2的8次方。
所以当然可以放的下0xff,肯定不是0xff导致的。
可能是str1[ci+1],ci+1,这个值导致PC-LINT发了告警的。
所以当然可以放的下0xff,肯定不是0xff导致的。
可能是str1[ci+1],ci+1,这个值导致PC-LINT发了告警的。
#1
PC-lint这么严格阿
不太清楚怎么改
另外我觉得你可以用
memset( str1, 0xFF, sizeof( str1 ) );
不太清楚怎么改
另外我觉得你可以用
memset( str1, 0xFF, sizeof( str1 ) );
#2
数组有越界?
#3
没有错啊,这跟"\0"没关系啊
#4
明显的越界嘛……
当ci == 3的时候,ci + 1 == 4,这个不是显然的越界么?
当ci == 3的时候,ci + 1 == 4,这个不是显然的越界么?
#5
数组越界
for(ci=0;ci<4;ci++)
{
str1[ci]=0xff;
}
for(ci=0;ci<4;ci++)
{
str1[ci]=0xff;
}
#6
而且pc-lint都告诉你是越界了一个字节了……
你把str定义为char[5]就没问题了
你把str定义为char[5]就没问题了
#7
不大清楚怎么改,但是我觉得不是“最后一个位置没有'\0'结束符号”的原因,因为只有字符串才要结束符号,而你的是字符型数组所以不需要结束符。
另外个人分析由于你定义的是unsigned char 型数组,在内存只占一个字节,所以它的范围应该是0---255;
你赋值的时候给的是0xff也就是最后一位,而警告提示:通过'['操作符指针(超出1最后数据)禁止访问。
你换换0----255以内的数据可能就没有警告。
另外个人分析由于你定义的是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 的超过数据结束范围)的操做范围
好象就是越界的意识
外面的指针范围禁止超过指示器(1 的超过数据结束范围)的操做范围
好象就是越界的意识
#12
str1[ci]当然可以放的下0xff,unsigned char占用1个字节,所以它的最大值可以到2的8次方。
所以当然可以放的下0xff,肯定不是0xff导致的。
可能是str1[ci+1],ci+1,这个值导致PC-LINT发了告警的。
所以当然可以放的下0xff,肯定不是0xff导致的。
可能是str1[ci+1],ci+1,这个值导致PC-LINT发了告警的。