STM32 UM1721中FATFS_LinkDriver代码是否存在数组越界问题?
关于FatFS中FATFS_LinkDriver的数组越界疑问解答
首先明确结论:当disk.nbr等于_VOLUMES时调用FATFS_LinkDriver,不会尝试向disk.drv[_VOLUMES]写入数据,不存在数组越界问题,原因如下:
CubeMX生成的FatFS驱动代码中,FATFS_LinkDriver的核心逻辑会先做边界检查,典型实现类似:
uint8_t FATFS_LinkDriver(const Diskio_drvTypeDef *drv, char *path) { uint8_t ret = 0; /* 先判断当前已注册驱动数量是否小于最大卷数 */ if(disk.nbr < _VOLUMES) { // 仅在合法索引范围内写入驱动指针 disk.drv[disk.nbr] = drv; disk.is_initialized[disk.nbr] = 0; ret = disk.nbr; disk.nbr++; // 注册成功后才递增计数 } else { // 已达到最大卷数,返回错误码 ret = _VOLUMES; } // 后续路径挂载等逻辑... return ret; }
- 当
disk.nbr == _VOLUMES时,会直接进入else分支,不会执行任何对disk.drv数组的写入操作,自然不会访问disk.drv[_VOLUMES]这个超出数组合法范围的索引(数组大小为_VOLUMES,合法索引是0到_VOLUMES-1)。 disk.nbr的设计作用是跟踪已成功注册的磁盘驱动数量,初始值为0,每完成一次合法注册才会自增1,从逻辑上就限制了它的最大值不会超过_VOLUMES,且仅在小于_VOLUMES时才会操作数组。
内容的提问来源于stack exchange,提问作者Monem Ahmed
相关产品推荐
相关产品推荐

