我有以下代码:
int& func(int i){ int *p = &i; return *p; } int& func2(int i){ vectorv; v.push_back(i); return v[0]; } int & func3(int i){ array arr; arr[0] = i; return arr[0]; } int& func4(int i){ int j = i; return j; } int main(){ cout< 调用func它没关系,因为虽然p是本地的*p是i,我生活在全局范围内(?).调用func2返回0,这对我来说没有意义,我希望有一个分段错误,因为v是一个局部向量...调用func3返回正确的值,这也没有意义,原因与以上.调用func4最终做了我所期望的给出segmentatioun错误
有人可以帮助我理解深层发生的事情吗?为什么向量和数组工作,因为它们被声明为静态?实际上考虑到所有函数都返回引用,我预计会出现分段错误,因为向量和数组是本地对象,一旦函数结束就应该删除它们.
很感谢
1> SergeyA..:那里发生了未定义的行为.通过引用返回本地参数或变量是未定义的行为,与向其返回地址的方式相同.