Warnung C26485
Ausdruck 'Arrayname': Kein Array zum Zeigerzerfall (Bounds.3).
Hinweise
Wie C26481 hilft diese Prüfung, die C++-KernrichtlinienregelI.13 zu erzwingen: Übergeben Sie kein Array als einzelner Zeiger. Die Regel erkennt Orte, an denen statische Arraytypinformationen vom Verfall in einen unformatierten Zeiger verloren gehen. Die zstring
Typen czstring
sind nicht ausgeschlossen.
C26481 und C26485 stammen aus den Bounds Tresor ty Profile rules. Diese Regeln wurden in der ersten Version der C++ Core Guidelines Checker implementiert. Sie gelten für die Kategorie "Unformatierte Zeiger", da sie dazu beitragen, unsichere Verwendung von Unformatierten Zeigern zu vermeiden.
Beispiel
Dieses Beispiel führt zu zwei Warnungen für array to pointer decay im Aufruf von 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;
}
Um dieses Problem zu beheben, vermeiden Sie Aufrufe, die Zeigerparameter annehmen, aber keine Begrenzungsinformationen verwalten. Die Verwendung solcher Funktionen ist häufig fehleranfällig. Bevorzugen Sie C++-Standardbibliotheksaufrufe für C-Laufzeitbibliotheksfunktionen. Erwägen Sie die Verwendung gsl::span
oder std::vector
in Ihren eigenen Funktionen. Eine explizite Umwandlung in den verfallenen Zeigertyp verhindert die Warnung, verhindert jedoch nicht den Code des Fehlers.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für