Une fonction construit un résultat dans une variable locale et rend son adresse. L'appelant lit la bonne valeur pendant des mois, puis se met à lire autre chose après l'ajout d'une fonction sans rapport.
Objectif
Établir ce qui se teste et ce qui ne se teste pas dans cette famille de défauts.
Le code en cause
int *fabrique(void) {
int local = 42;
return &local;
}
La règle qui évite ce cas
Ne jamais faire sortir d'une fonction l'adresse d'une de ses variables locales. Ce qui doit survivre à la fonction se demande au tas, et la charge de le rendre se transmet alors avec l'adresse.