Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Non consentire a una funzione di restituire un puntatore non valido, tramite un'istruzione return formale o tramite parametri di output.
int* ex1(int a)
{
return &a; // returns a dangling pointer to the stack variable 'a'
}
void ex2(int a, int** out)
{
*out = &a; // 'out' contains a dangling pointer to the stack variable 'a'
}
Osservazioni:
Le linee guida per la durata delle linee guida di base di C++ delineano un contratto che il codice può seguire, che consente una perdita di memoria statica più approfondita e il rilevamento di puntatori. Le idee di base alle linee guida sono:
- Non dereferenziare mai un puntatore null o un puntatore null non valido.Never dereference an invalid (dangling) or known-null pointer.
- Non restituire mai, tramite un'istruzione restituita formale o un parametro out, qualsiasi puntatore incerto da una funzione.
- Non passare mai un puntatore (dangling) non valido a qualsiasi funzione.
Un puntatore non valido è incerto quando punta a qualcosa che non c'è più. Ad esempio, qualsiasi puntatore a una variabile o a un parametro locale, una volta che non rientra nell'ambito. In alternativa, un puntatore a una risorsa eliminata. Anche un puntatore a un oggetto statico può essere infastinato, se il valore viene modificato prima che possa essere usato. Un puntatore dangling era una volta valido; questo è ciò che lo distingue da altri tipi di puntatori non validi, ad esempio un puntatore non inizializzato, o nullptr.