У меня есть следующий код:возвращаются локальные переменные по ссылке
int& func(int i){
int *p = &i;
return *p;
}
int& func2(int i){
vector<int> v;
v.push_back(i);
return v[0];
}
int & func3(int i){
array<int,4> arr;
arr[0] = i;
return arr[0];
}
int& func4(int i){
int j = i;
return j;
}
int main(){
cout<<func(3)<<endl;
cout<<func2(10)<<endl;
cout<<func3(100)<<endl;
cout<<func4(123)<<endl;
return 0;
}
outuput:
3
0
100
segmentation faul(core dumped)
вызова функ это нормально, потому что в то время как р является локальным * р я, и живет в глобальном масштабе (?). вызов func2 return 0, что для меня не имеет смысла, я ожидал иметь ошибку сегментации, так как v является локальным вектором ... вызов func3 возвращает правильное значение, и это тоже не имеет смысла, для того же причина как выше. вызов func4, наконец, делает то, что я ожидал, давая segmentatioun fault
Может кто-нибудь помочь мне понять, что происходит в глубине? почему вектор и массив работают, поскольку они были объявлены как статические? на самом деле, учитывая, что все функции возвращают ссылку, я ожидал иметь ошибку сегментации, так как вектор и массив являются локальным объектом, и они должны быть удалены после завершения функции.
очень благодарит
* Отсутствие * функций в коде, который вы показываете, фактически работает (даже не 'func'), все они приводят к * неопределенному поведению *. И как только у вас есть * неопределенное поведение *, это действительно бесполезно в спорах. –
_and i живет в глобальном масштабе (?) _ Что дало вам эту идею? Во всех примерах 'i' является переменной, которая является локальной для функции. –
Я предполагал, что, поскольку выход был совпадающим значением i, переданным в func. –