【发布时间】:2010-05-26 15:11:16
【问题描述】:
我正在准备期末考试,我偶然发现了一个奇怪的问题,这是我们的老师去年为一些可怜的人提供的考试的一部分。问题是这样的:
以下程序是否正确?如果是,请写下程序输出的内容。如果不是,请写下原因。
程序:
#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。我不确定这是否是巧合,或者当它是 malloc-ed 时,类成员是否被初始化为 0。
- 这是默认行为(
p2->x在malloc之后为 0)吗?我应该预料到会这样吗? -
你的会回答我老师的问题吗? (除了忘记
#include <stdlib.h>为malloc:P)
【问题讨论】:
-
为什么 0 也不能是任意数字?
-
除此之外
<iostream.h>应该只是<iostream>。 -
您还可以修复老师的内存泄漏问题。
-
FMI UNIBUC 的斗争
标签: c++ memory-management malloc