Quizás sea una pregunta para principiantes, pero ¿hay algún método en C/C++ para evitar que una función acepte un puntero a una variable local?Prevención de punteros locales
consideran este código:
int* fun(void)
{
int a;
return &a;
}
El compilador generará una advertencia de que el puntero no puede ser devuelto. Ahora considere esto:
int* g;
void save(int* a)
{
g = a;
}
void bad(void)
{
int a;
save(&a);
}
Esto pasará por el compilador sin una advertencia, lo que es malo. ¿Hay algún atributo o algo para evitar que esto suceda? Es decir. algo como:
void save(int __this_pointer_must_not_be_local__ * a)
{
g = a;
}
Gracias de antemano si alguien sabe la respuesta.
código comentarios? ... perfiles de código como pelusa? –
Revisiones de código, análisis estático. Lo que está pidiendo es de hecho muy, muy complejo. –
¿Qué sucede si quiero hacer 'void f() {int b; save (&b);/* do stuff */save (NULL);} '? No es necesariamente el hecho de que la variable sea" local "lo que importa; Esto también sería malo.' int * p = new int(); save (p); eliminar p; ' –