我在我的项目中使用 Renesas V850 系列微控制器。我的产品使用与主程序部分分开的非易失性内存块(NVRam 块)位置。在运行期间,会监控这些 NVRam 块以验证它们没有损坏。此检查使用类似于以下给出的代码完成:
逻辑 1
if((NULL != pBlock_One_Pointer) && (BLOCK_ONE_ID != *(((const tUI8*)pBlock_One_Pointer) + ID_OFFSET)))
{
.....Do some corrective action....
}
这段代码的问题是,如果指针“pBlock_One_Pointer”不知何故被值“NULL”损坏,Block_ID 检查(“if”语句的第二部分未完成)。
避免这种情况的一种方法是删除“if”条件的第一部分,它检查 Block_ID 而不管指针是否为“NULL”,如下所示
逻辑 2
if (BLOCK_ONE_ID != *(((const tUI8*)pBlock_One_Pointer) + ID_OFFSET))
但是如果“pBlock_One_Pointer”指向NULL,会不会引发异常?
所以基本上我有两个问题:
- 由于运行时的某些损坏,指针是否有可能变为 NULL 指针?
- 如果是这样,Logic 2会帮助我克服它吗?