c-CPPCheck空指针取消引用



我维护一些嵌入式C代码(无操作系统(。我已经做了一些更新,并对我的更改运行CPPCheck。

CPPCheck出现错误"Null指针取消引用:(volatile unsigned int*(0"。这不在我的代码更改中,但我很想了解发生了什么。据我所知,取消引用空指针的行为是未定义的。

''

typedef void (*pfFunc_T)( void );
/* restart bootloader */
pfFunc_T  pfFunc;
__interrupt_disable();
pfFunc  = (pfFunc_T)( ( *(volatile U32*)0 ) );   /*CPPCheck error*/
if ( pfFunc != NULL )           /* no program loaded */
{
pfFunc();
}

''

它是内存映射的,引导加载程序是第一个。它会从另一个应用程序调用引导加载程序吗?

我猜您正试图将函数指针分配给在内存地址零处找到的内容。这不适用于一致的编译器——C语言不允许访问绝对地址零,因为这个地址是为null指针的特殊情况保留的。

要解决这个问题,您需要将某种标识符链接到地址0,然后在源中使用该标识符。

最新更新