मैं एक अंतिम परीक्षा के लिए पढ़ रहा हूं और मैंने एक उत्सुक प्रश्न पर ठोकर खाई जो हमारे शिक्षक ने पिछले साल कुछ गरीब आत्माओं को दी गई परीक्षा का हिस्सा था। सवाल इस तरह कुछ जाता है:कक्षा के सदस्यों के साथ क्या होता है जब नए के बजाए मॉलोक का उपयोग किया जाता है?
क्या निम्न प्रोग्राम सही है, या नहीं? यदि ऐसा है, तो प्रोग्राम आउटपुट क्या लिखें। यदि ऐसा नहीं है, तो क्यों लिखें।
कार्यक्रम:
#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 है) डिफ़ॉल्ट? क्या मुझे की उम्मीद है यह? - आपके मेरे शिक्षक के प्रश्न का उत्तर क्या होगा? (
malloc
के लिए#include <stdlib.h>
को भूल के अलावा: पी)
0 मनमानी संख्या क्यों नहीं हो सकता है? –
किसी और चीज़ के अलावा ' 'केवल' 'होना चाहिए। –
आप अपने शिक्षक की मेमोरी लीक भी ठीक कर सकते हैं। –