Lorsque la fonction implique une réallocation, j'ai constaté que certains compilateurs peuvent enregistrer l'adresse avant l'appel de la fonction. Cela conduit la valeur de retour stockée dans l'adresse invalide.
Il y a un exemple pour expliquer le comportement dans la description ci-dessus.
#include <stdio.h>
#include <vector>
using namespace std;
vector<int> A;
int func() {
A.push_back(3);
A.push_back(4);
return 5;
}
int main() {
A.reserve(2);
A.push_back(0);
A.push_back(1);
A[1] = func();
printf("%d\n", A[1]);
return 0;
}
Il y a quelques compilateurs C++ courants, et le résultat du test est le suivant.
- GCC(GNU Compiler Collection) : Erreur d'exécution ou sortie
1
- Clang : sortie
5
- VC++ : sortie
5
Est-ce un comportement indéfini ?