MISRAC2012-Rule-18.1d以太网MAC存在问题

MISRAC2012-Rule-18.1d以太网MAC存在问题,c,static-analysis,misra,C,Static Analysis,Misra,我的源代码中有一个clasic以太网MAC地址代码: netif->hwaddr[0] = heth.Init.MACAddr[0]; netif->hwaddr[1] = heth.Init.MACAddr[1]; netif->hwaddr[2] = heth.Init.MACAddr[2]; netif->hwaddr[3] = heth.Init.MACAddr[3]; netif->hwaddr[4] = heth.Init.

我的源代码中有一个clasic以太网MAC地址代码:

  netif->hwaddr[0] =  heth.Init.MACAddr[0];
  netif->hwaddr[1] =  heth.Init.MACAddr[1];
  netif->hwaddr[2] =  heth.Init.MACAddr[2];
  netif->hwaddr[3] =  heth.Init.MACAddr[3];
  netif->hwaddr[4] =  heth.Init.MACAddr[4];
  netif->hwaddr[5] =  heth.Init.MACAddr[5];
编辑:

当我尝试在我的代码中进行静态分析时,我在所有这些行中都会遇到此错误:


我该如何解决这个问题?

MISRA检查器说您访问数组时超出了范围,显然情况也是如此:

#define NETIF_MAX_HWADDR_LEN 5U

u8_t hwaddr[NETIF_MAX_HWADDR_LEN];

...
netif->hwaddr[5] =  heth.Init.MACAddr[5];

数组在C语言中是0索引的。解决这个问题的方法是不要声明太小的数组。

我们没有足够的信息-如果(例如)
netif->hwaddr
只有4个字节大怎么办?显示更多代码。您需要确保analyzr知道指针指向何处。您需要重写您的数据类型以对其进行原型化。米斯拉是。。。。。headI在我的主题中添加了一些细节请不要破坏你的问题,也不要使用自制的整数类型并使用
stdint.h
。你完全没有理由不使用这个。很抱歉我写的信息是5U,但它是6U。很抱歉。@gogogo Ok,但工具说你正在访问索引42或其他东西。。。
#define NETIF_MAX_HWADDR_LEN 5U

u8_t hwaddr[NETIF_MAX_HWADDR_LEN];

...
netif->hwaddr[5] =  heth.Init.MACAddr[5];