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类似。

总结一句,基础不牢,地动山摇。

posted @ 2015-04-09 20:29  BestWangJie  阅读(104)  评论(0编辑  收藏  举报