Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O ponteiro aponta para a memória alocada na pilha (ES.65)
Observações
O ponteiro aponta para uma variável alocada na pilha. Quando a variável sai do escopo, ela é removida, o que faz com que o ponteiro se torne inválido.
Esta verificação reconhece visões e proprietários da Biblioteca de Modelo Padrão (STL) do C++. Para ensinar esta verificação sobre tipos criados pelo usuário, use a anotação [[msvc::lifetimebound]].
O suporte [[msvc::lifetimebound]] é novo no MSVC 17.7.
Nome da análise de código: LIFETIME_LOCAL_USE_AFTER_FREE_STACK
Exemplos
// 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 correção é estender a duração do valor que é usado. Neste exemplo, abordamos o aviso retornando o std::string. Pode também ser tratado copiando os dados para o heap ou adicionando uma variável "out" à lista de parâmetros da função.
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();
}