MS笔试中的一个关于函数返回的“小”题
Which of following C++ code is correct ?
A.
int f() { int *a = new int(3); return *a; }
B.
int *f() { int a[3] = {1,2,3}; return a; }
C.
vector<int> f() { vector<int> v(3); return v; }
D.
void f(int *ret) { int a[3] = {1,2,3}; ret = a; return ; }
这题考察的是程序中的内存分配,A中指针a是位于栈上,a指向的内存位于堆中,能够返回整型但是会有内存泄漏。
B中数组a为栈上数据,函数返回后自动释放,故返回a指针不能返回数组数据。
C中返回的的是向量,过程实际上是通过临时变量拷贝到指定的变量中,正确。
而D错误与B类似。
总结一句,基础不牢,地动山摇。
learn++