Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A mutató a veremen lefoglalt memóriára mutat (ES.65)
Megjegyzések
A mutató a veremen lefoglalt változóra mutat. Amikor a változó kimegy a hatókörből, az törlődik, ami miatt a mutató érvénytelen lesz.
Ez az ellenőrzés felismeri a C++ Standard Sablontár (STL) nézeteit és tulajdonosait. Ha meg szeretné tanítani ezt az ellenőrzést a felhasználó által létrehozott típusokról, használja a [[msvc::lifetimebound]] jegyzetet.
A [[msvc::lifetimebound]] támogatás az MSVC 17.7-ben új.
Kódelemzés neve: LIFETIME_LOCAL_USE_AFTER_FREE_STACK.
Példák
// In this example, std::string is being used internally because the implementer felt it was easier to
// perform the non-trivial initialization of the value but the function returns a C-style string.
const char *danglingRawPtrFromLocal() {
std::string s;
// interesting string initialization here
return s.c_str(); // Oops, The pointer points to memory that will be cleaned up upon return. Warning C26816.
}
struct Y { int& get() [[msvc::lifetimebound]]; };
int& f() {
Y y;
return y.get(); // Warning C26826
}
A javítás a használt érték élettartamának meghosszabbítása. Ebben a példában az std::sztring visszaadásával foglalkozunk a figyelmeztetéssel. Az is megoldható, ha az adatokat a halomba másolja, vagy hozzáad egy "out" változót a függvényparaméterek listájához.
std::string danglingRawPtrFromLocal() {
std::string s;
// interesting string initialization here
return s;
}
struct Y { int& get() [[msvc::lifetimebound]]; };
int f() {
Y y;
return y.get();
}