2012 Microsoft Intern Hiring Written Test : 6

来源:互联网 发布:网络执行官 编辑:程序博客网 时间:2024/05/08 04:45

6. 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 ;}

(E) none of above

问题分析:

(A) 内存泄漏(Memory Leak)

 int* a = new int (3);    //使用new在堆上分配内存,并初始化为3

return *a;    // 返回指针a所指内容的一个副本,而不是指针*a本身。

由于本函数结束后,并没有对分配的堆内存进行delete,这样你就不能再对这块内存进行重新分配;

由于在函数返回后,并没有返回在堆上分配内存的地址,这样就不能访问在堆上分配内存的内容;

所以,最终将会导致内存泄漏。

(B) Garbage Value

int a[3] = {1, 2, 3};    // 数组在栈上分配内存

return a;    // 返回数组首地址

由于数组a是在栈上分配内存,所以函数结束后栈上的内容将出栈,当你通过return a;获得数组首地址后,试图通过该地址再次进行栈内存时,将会导致获取垃圾值。

(C) Right Answer

vector<int> v(3);    // vector在堆上分配3个int的内存,并默认初始化为0

(D) 同B类似

综上分析:我的答案是C。如果有错误的地方,请大家指正!吐舌头