Ok. D'ailleurs, ce problème peut aussi apparaître avec ta signature pour f...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| struct ALaCon
{
vector<ALaCon> *v;
};
void f(const ALaCon* t, int nbElem)
{
ALaCon a;
t->v->push_back(a);
}
int main()
{
vector<ALaCon> v;
ALaCon a;
a.v = &v;
v.push_back(a) ;
f(&v[0],1);
} |
Ou plus simple encore :
int f(T const * t, int nbElem, vector<T> v)
Pour peu que le troisième élément réfère au même tableau que le premier, on peut avoir des surprises.
Il n'est reste pas moins que le code marche dans les cas non pathologiques, et que ce qui est important, c'est de savoir que la valeur retournée par &v[0] n'est valide que jusqu'à la prochaine modification du nombre d'éléments du vector, ce qu'aucune déclaration de fonction n'est capable d'assurer.
Partager