Переполнение буфера: Result[NumOfResult] = addr; — если maxNumResults == 0, обращение к Result[0] вызовет UB (необъявленный массив).
Невозможность записать последний адрес: цикл for (uint8_t i = 0; i < maxNumResults - 1; i++) и проверка if (NumOfResult < maxNumResults - 1) — при maxNumResults == 1 массив не заполняется вообще, даже если устройство найдено.
Отсутствие нулевого terminator: после цикла нет явного Result[NumOfResult] = 0;, поэтому пользователь не может найти конец списка без знания NumOfResult.
### Автоматический отчет анализа кода
**Файл:** `Src/DS_I2CScanner.c`
**Рекомендации ИИ:**
**Критические проблемы:**
1. **Переполнение буфера**: `Result[NumOfResult] = addr;` — если `maxNumResults == 0`, обращение к `Result[0]` вызовет UB (необъявленный массив).
2. **Невозможность записать последний адрес**: цикл `for (uint8_t i = 0; i < maxNumResults - 1; i++)` и проверка `if (NumOfResult < maxNumResults - 1)` — при `maxNumResults == 1` массив не заполняется вообще, даже если устройство найдено.
3. **Отсутствие нулевого terminator**: после цикла нет явного `Result[NumOfResult] = 0;`, поэтому пользователь не может найти конец списка без знания `NumOfResult`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Автоматический отчет анализа кода
Файл:
Src/DS_I2CScanner.cРекомендации ИИ:
Критические проблемы:
Result[NumOfResult] = addr;— еслиmaxNumResults == 0, обращение кResult[0]вызовет UB (необъявленный массив).for (uint8_t i = 0; i < maxNumResults - 1; i++)и проверкаif (NumOfResult < maxNumResults - 1)— приmaxNumResults == 1массив не заполняется вообще, даже если устройство найдено.Result[NumOfResult] = 0;, поэтому пользователь не может найти конец списка без знанияNumOfResult.