Advertencia C26487
No permita que una función devuelva un puntero no válido, ya sea a través de una instrucción de devolución formal o mediante parámetros de salida.
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'
}
Comentarios
Las directrices de duración de C++ Core Guidelines describen un contrato que el código puede seguir, que permite una fuga de memoria estática más exhaustiva y la detección de punteros pendientes. Las ideas básicas que subyacen a las directrices son:
- Nunca desreferenciar un puntero nulo no válido (pendiente) o conocido.
- Nunca devolver, ya sea mediante una instrucción de devolución formal o un parámetro de salida, ningún puntero de una función.
- Nunca pasar un puntero no válido (pendiente) a ninguna función.
Un puntero no válido está pendiente cuando apunta a algo que ya no está allí. Por ejemplo, cualquier puntero a una variable o parámetro local, una vez que se ha quedado fuera del ámbito. O bien, un puntero a un recurso que se ha eliminado. Incluso un puntero a un elemento estático puede estar pendiente si el valor se cambia antes de que se pueda usar. Un puntero pendiente solo es válido una vez; eso es lo que lo distingue de otros tipos de punteros no válidos, como un puntero no inicializado o nullptr
.
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de