Vielleicht ist es eine neue Frage, aber gibt es eine Methode in C/C++, um zu verhindern, dass eine Funktion einen Zeiger auf eine lokale Variable akzeptiert?Verhindern von lokalen Zeigern
Betrachten Sie diesen Code:
int* fun(void)
{
int a;
return &a;
}
Der Compiler erzeugt eine Warnung wird, dass der Zeiger nicht zurückgegeben werden können. Betrachten Sie jetzt folgendes:
int* g;
void save(int* a)
{
g = a;
}
void bad(void)
{
int a;
save(&a);
}
Dies wird durch den Compiler ohne eine Warnung passieren, die schlecht ist. Gibt es ein Attribut oder etwas, um dies zu verhindern? I.e. etwas wie:
void save(int __this_pointer_must_not_be_local__ * a)
{
g = a;
}
Vielen Dank im Voraus, wenn jemand die Antwort kennt.
code reviews? ... Code-Profiler wie Flusen? –
Codeüberprüfungen, statische Analyse. Was du verlangst, ist in der Tat sehr, sehr komplex. –
Was wäre, wenn ich 'void f() {int b; save (&b);/* tu stuff */save (NULL);} '? Es ist nicht unbedingt die Tatsache, dass die Variable" local "ist, was wichtig ist. Das wäre auch schlecht.' int * p = new int(); save (p); löschen p; ' –