Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Выражение "array-name": нет массива для распада указателя (bounds.3).
Замечания
Как и C26481, эта проверка помогает применить правило основных рекомендаций C++I.13: не передавать массив в виде одного указателя. Правило обнаруживает места, в которых сведения о типе статического массива теряются от распада до необработанного указателя.
zstring Типы и czstring типы не исключаются.
C26481 и C26485 приходят из правил профиля безопасности Границ. Эти правила были реализованы в первом выпуске средства проверки основных рекомендаций C++ . Они применимы к категории необработанных указателей, так как они помогают избежать небезопасного использования необработанных указателей.
Пример
Этот пример приводит к двум предупреждениям для разложения указателя массива в вызове memcpy.
// c26485_bad.cpp
// compile using:
// set Esp.Extensions=CppCoreCheck.dll
// cl /W4 /EHsc /permissive- /analyze /analyze:plugin EspXEngine.dll /analyze:ruleset "%VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets\CppCoreCheckBoundsRules.ruleset" c26485_bad.cpp
#include <cstring>
constexpr int array_length = 10;
int main() noexcept
{
int const from_array[array_length] = { 4, 3, 2, 1, 0, 9, 8, 7, 6, 5 };
int to_array[array_length] = {};
if (nullptr != memcpy(to_array, from_array, sizeof(int) * array_length))
return 0;
return 1;
}
Чтобы устранить эту проблему, избегайте вызовов, которые принимают параметры указателя, но не управляют сведениями о границах. Использование таких функций часто подвержено ошибкам. Предпочитайте вызовы стандартной библиотеки C++ к функциям библиотеки среды выполнения C. Рассмотрите возможность использования gsl::span или std::vector в собственных функциях. Явный приведение к типу разложенного указателя предотвращает предупреждение, но не предотвращает ошибку кода.