C++ · Intermediário · Inglês · Informal
dangling pointer
Ponteiro ou referência que aponta para um objeto que já foi destruído ou liberado. Usá-lo é comportamento indefinido, e o programa pode parecer funcionar até quebrar em produção.
Onde usar
Aparece ao retornar referência de variável local, guardar ponteiro para elemento de vector que realocou ou usar um objeto depois do delete. O AddressSanitizer reporta como use-after-free ou use-after-scope.
Em código
int* cria() {
int local = 5;
return &local; // local destruído
}
int* p = cria();
std::cout << *p; // comportamento indefinidoExemplos
This returns a pointer to a local variable, so it's a dangling pointer.
Isso retorna um ponteiro para uma variável local, então é um dangling pointer.
The vector reallocated and left a dangling pointer to the old element.
O vector realocou e deixou um dangling pointer para o elemento antigo.
Cuidado
Zerar o ponteiro depois do delete não resolve as cópias dele espalhadas pelo programa.
Sinônimos
ponteiro pendente