我正在学习期末考试,偶然发现一个奇怪的问题,那是我们老师去年给一些可怜的灵魂考试的一部分。问题是这样的:当使用malloc而不是new时,类成员会发生什么?
以下程序是否正确或不正确?如果是,写下程序输出的内容。如果不是,请写下原因。
程序:
#include<iostream.h>
class cls
{ int x;
public: cls() { x=23; }
int get_x(){ return x; } };
int main()
{ cls *p1, *p2;
p1=new cls;
p2=(cls*)malloc(sizeof(cls));
int x=p1->get_x()+p2->get_x();
cout<<x;
return 0;
}
我的第一反应是与回答“程序是不正确的,因为new
应该用来代替malloc
”。然而,在编译程序并看到它输出23
我意识到那个答案可能不正确。
问题是我期待p2->get_x()
返回一些任意数字(无论在调用malloc
时发生在内存中的那一点)。然而,它返回0.我不确定这是否是巧合,或者当类成员是0时初始化为malloc
-ed。
- 这种行为(
p2->x
为0后malloc
)的默认值是?我应该有预计这个? - 你的回答我老师的问题是? (除了忘了
#include <stdlib.h>
为malloc
:P)
为什么不能0也是一个任意数字? – 2010-05-26 15:14:59
除了别的以外''应该只是''。 –
2010-05-26 15:16:30
你也可以修复你的老师的内存泄漏。 – 2010-05-26 16:56:31