Когда функция включает перераспределение, я обнаружил, что некоторые компиляторы могут сохранить адрес перед вызовом функции. Он возвращает возвращаемое значение, хранящееся в неверном адресе.
В приведенном выше описании приведен пример объяснения поведения.
#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;
}
Существует некоторый общий компилятор C++ и результат теста следующим образом.
- GCC (сборник компилятора GNU): ошибка выполнения или выход
1
- Clang: выход
5
- V C++: выход
5
Это неопределенное поведение?