MISRA C++-2008 规则 5-0-15 - 数组索引应是指针算术的唯一形式
MISRA C++-2008 Rule 5-0-15 - Array indexing shall be the only form of pointer arithmetic
我需要对 MISRA 有更多经验的人来帮助我解决这个问题。我有以下代码:
byte* buf = new(std::nothrow) byte[bufferSize];
.....
for (uint32_t i = 0; i < bufferSize; i+=4)
{
..............
{
buf[ i+0 ] = b;
buf[ i+1 ] = g;
buf[ i+2 ] = r;
(1) Event misra_violation: [Required] MISRA C++-2008 Rule 5-0-15 violation: Array indexing shall be the only form of pointer arithmetic.
buf[ i+3 ] = a;
}
MISRA 规则 5-0-15 也不允许 ptr++ 或 ptr--。 increment/decrement 和使用 new 创建的指针赋值的方法应该是什么?
我的 MISRA 检查器是 Coverity 7.0.3.3。
你的代码没有问题。它根据需要使用数组索引。你的静态分析器坏了。
好的,我找到了一个可行的方法:
byte* buf = new(std::nothrow) byte[bufferSize];
.....
for (uint32_t i = 0; i < bufferSize; i+=4)
{
..............
uint32_t k = i;
buf[k] = b;
k++;
buf[k] = g;
k++;
buf[k] = r;
k++;
buf[k] = a;
}
MISRA 似乎不喜欢[] 括号内的索引算法。我不确定这是否是该工具中的错误,也许它已在较新的 Coverity 工具中修复。
以下内容无效(MISRA 再次投诉违反规则 5-0-15):
byte* buf = new(std::nothrow) byte[bufferSize];
.....
for (uint32_t i = 0; i < bufferSize; i+=4)
{
..............
uint32_t k = i;
buf[k++] = b;
buf[k++] = g;
buf[k++] = r;
buf[k++] = a;
}
我觉得 "for" 应该有 "i+3" 的条件。
for (uint32_t i = 0; i+3 < bufferSize; i+=4)
这可以解决问题。
如果解决了请告诉我。
我需要对 MISRA 有更多经验的人来帮助我解决这个问题。我有以下代码:
byte* buf = new(std::nothrow) byte[bufferSize];
.....
for (uint32_t i = 0; i < bufferSize; i+=4)
{
..............
{
buf[ i+0 ] = b;
buf[ i+1 ] = g;
buf[ i+2 ] = r;
(1) Event misra_violation: [Required] MISRA C++-2008 Rule 5-0-15 violation: Array indexing shall be the only form of pointer arithmetic.
buf[ i+3 ] = a;
}
MISRA 规则 5-0-15 也不允许 ptr++ 或 ptr--。 increment/decrement 和使用 new 创建的指针赋值的方法应该是什么?
我的 MISRA 检查器是 Coverity 7.0.3.3。
你的代码没有问题。它根据需要使用数组索引。你的静态分析器坏了。
好的,我找到了一个可行的方法:
byte* buf = new(std::nothrow) byte[bufferSize];
.....
for (uint32_t i = 0; i < bufferSize; i+=4)
{
..............
uint32_t k = i;
buf[k] = b;
k++;
buf[k] = g;
k++;
buf[k] = r;
k++;
buf[k] = a;
}
MISRA 似乎不喜欢[] 括号内的索引算法。我不确定这是否是该工具中的错误,也许它已在较新的 Coverity 工具中修复。
以下内容无效(MISRA 再次投诉违反规则 5-0-15):
byte* buf = new(std::nothrow) byte[bufferSize];
.....
for (uint32_t i = 0; i < bufferSize; i+=4)
{
..............
uint32_t k = i;
buf[k++] = b;
buf[k++] = g;
buf[k++] = r;
buf[k++] = a;
}
我觉得 "for" 应该有 "i+3" 的条件。
for (uint32_t i = 0; i+3 < bufferSize; i+=4)
这可以解决问题。 如果解决了请告诉我。