我正在學習期末考試,偶然發現一個奇怪的問題,那是我們老師去年給一些可憐的靈魂考試的一部分。問題是這樣的:當使用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