इस कोड पर विचार करें? या फिर इसे वैध रूप से x=5;
जैसे मान को असाइन करने के लिए उपयोग किया जा सकता है?क्या एक संदर्भ बाध्यकारी वास्तव में ऑपरेंड का मूल्यांकन करता है? कारण अप्रारंभीकृत चर पढ़ने के लिए यूबी के लिए अग्रणी</p> <pre><code>int& x=*new int; </code></pre> <p>करता है वास्तव में नव निर्मित संकेतक भिन्नता असाइनमेंट की आरएचएस,:
उत्तर
जहां तक मैं कह सकता हूं, आपने जो भी किया है, उनमें से कोई भी अपरिभाषित व्यवहार शामिल नहीं है।
हालांकि, यह तुरंत स्मृति रिसाव का खतरा पैदा करता है। इसे जल्दी से हल किया जा सकता है (चूंकि लीक मेमोरी के पते को हल करेगा, और इसलिए हटाया जा सकता है) लेकिन यदि आप गुंजाइश छोड़ना चाहते हैं, तो आपके पास उस पॉइंटर को पुनर्प्राप्त करने का कोई तरीका नहीं होगा।
संपादित करें: बात करने के लिए,
int& x=*new int;
x = 5;
std::cout << x << std::endl;
std::cin >> x;
std::cout << x << std::endl;
कोड कैसा व्यवहार करेंगे लिखने के लिए अगर आप थे जैसे कि आप बस, एक्स के रूप में int x;
की घोषणा की थी, सिवाय इसके कि सूचक भी बाद कार्यक्रम दायरे से बाहर निकल गया झूलते रह जायेंगे ।
यदि आप इसे मूल्य निर्दिष्ट करने से पहले अनियंत्रित चर को पढ़ने का प्रयास करना चाहते हैं, तो आप अपरिभाषित व्यवहार प्राप्त करेंगे, लेकिन अगर x
आवंटित किया गया तो यह असत्य नहीं होगा।
@ बेंजामिन लिंडले ने भाषा को" मेमोरी रिसाव के * जोखिम * बनाने "के लिए संशोधित किया। और कारण यह है कि मैं इसे पहली जगह में एक स्मृति रिसाव कह रहा हूं क्योंकि अपने आप पर, कोड में स्मृति में उपयोगकर्ता-दृश्य सूचक नहीं होता है। – Xirema
मैं ऐसा करने की सलाह नहीं दूंगा। एक वैरिएबल के साथ गतिशील स्मृति को क्षैतिज लग रहा है जो स्थिर दिखता है मेरे लिए खतरनाक लगता है। निम्नलिखित कोड
#include <iostream>
int* dynamicAlloc() {
int& x = *new int;
std::cout << "Inside dynamicAlloc: " << x << std::endl;
std::cout << "Modified: " << (x = 1) << std::endl;
return &x;
}
int main() {
int *dall = dynamicAlloc();;
std::cout << "dall (address): " << dall << std::endl;
std::cout << "dall -> " << *dall << std::endl; // Memory not cleaned
delete dall; // Don't forget to delete
return 0;
}
पर विचार करें मैं इस तरह उत्पादन मिलता है:
Inside dynamicAlloc: -842150451
Modified: 1
dall (address): 00F642A0
dall -> 1
नोट कैसे अपसंदर्भन dall
एक segfault में परिणाम नहीं करता है। एक्स को दायरे से बाहर होने पर इसे हटा दिया नहीं गया था। अन्यथा एक segfault संभवतः हुआ होगा।
अंत में:
int& x
गतिशील आबंटित स्मृति के लिए एक उपनाम एक्स बनाता है। आप वैध रूप से उस मेमोरी को संशोधित कर सकते हैं, लेकिन यह साफ़ नहीं होगा क्योंकि यह संभावित मेमोरी लीक की वजह से आसानी से गुंजाइश से बाहर हो जाता है।
मुझे यह नहीं मिला। बेशक आप हटाए जाने के बाद एक पॉइंटर का उपयोग नहीं कर सकते हैं। ओपी के लिए एकमात्र जोखिम यह है कि अगर मेमोरी ठीक से संभाला नहीं जाता है तो यह रिसाव हो सकता है। – NathanOliver
मुख्य उद्देश्य यह था कि 'x'' परीक्षण() 'में दायरे से बाहर होने के बाद पते को आवंटित नहीं किया गया है। यदि आप सामानों को सही तरीके से प्रबंधित करते हैं, तो आप बाद में 'x' को हटा सकते हैं, लेकिन यह सहज नहीं है। एक बार जब मैं काम बंद कर दूं तो मैं फिर से शब्द कैसे लिखूंगा – Assimilater
उम्मीद है कि शब्द अब थोड़ा बेहतर है – Assimilater
- 1. <: <, <% <, =: = कंपाइलर में काम का स्केल कार्यान्वयन वास्तव में कैसे करता है?
- 2. << पायथन में क्या करता है?
- 3. <% $, <% @, <% =, <% # ... सौदा क्या है?
- 4. तो <FILE> वास्तव में क्या करता है?
- 5. 'ऑपरेटर <<' के लिए 'std :: cout <<' में अस्पष्ट अधिभार <<
- 6. PHP में <<< ईओडी का उपयोग क्या है?
- 7. प्रारंभ में हाल में घोषित चर का उपयोग करना (int x = x + 1)?</p> <p>जब लेखन:: - कार्यक्रम (या और भी जटिल अभिव्यक्ति को शामिल नव निर्मित चर x) मेरी जीसीसी/जी ++</p> <pre><code>int x = x+1; </code></pre> एक सी में/C++ <p>
- 8. <<बजाय << स्ट्रीम आउटपुट में संकलन क्यों करता है?
- 9. क्या करता है | और << मतलब है?
- 10. -><- ऑपरेटर क्या करता है?</p> <pre><code>IntPredicate neg = x -> x <- x; </code></pre> <p>यह क्या है, रिवर्स डबल लैम्ब्डा के कुछ प्रकार:
- 11. << पायथन में क्या प्रतिनिधित्व करता है?
- 12. ओवरलोडिंग ऑपरेटर << सरणियों के लिए
- 13. PHP क्या <<< मतलब है?
- 14. मेरे कार्य की समय जटिलता क्या है?</p> <pre><code>void what(int n) { int i; for (i = 1; i <= n; i++) { int x = n; while (x > 0) x -= i; } } </code></pre> <p>खैर, पाश के लिए पहले स्पष्ट रूप से <code>O(n)</code> है:
- 15. सी में (int) (हस्ताक्षरित चार) (x) क्या करता है?</p> <pre><code>#define __ismask(x) (_ctype[(int)(unsigned char)(x)]) </code></pre> <p><code>(int)(unsigned char)(x)</code> क्या करता है:
- 16. क्या class_eval << करता है - "end_eval", __FILE__, __LINE__ रूबी में क्या मतलब है?
- 17. कतार <T> वास्तव में
- 18. PHP में, "<<<" क्या दर्शाता है?
- 19. बैश में <() क्या करता है?
- 20. gperftools CPU प्रोफाइलर वास्तव में कैसे शुरू करता है?</p> <pre><code>$ gcc myprogram.c -lprofiler </code></pre> <p>(कार्यक्रम का एक कोड को बदले बिना):
- 21. "cout << cout" - आउटपुट के लिए क्या खड़ा है?
- 22. "<%:" क्या करता है?</p> <pre><code><%: Model.FirstName %> </code></pre> <p>क्या "<%:" करता है: कर
- 23. हास्केल - का मूल्यांकन (+) <$> (+3) <*> (* 100) $ 5
- 24. एक्सप्रेस में, app.router वास्तव में क्या करता है?</p> <pre><code>... var app = express(); ... app.use(app.router); </code></pre> <p>मैं app.router के बारे में ज्यादा नहीं मिला:
- 25. ऑपरेटर के साथ पूर्णांक पदोन्नति <<
- 26. करता Kotlin एक पहचान समारोह है?</p> <pre><code>def identity[A](x: A): A </code></pre> <p>करता Kotlin मानक पुस्तकालय में एक ऐसी ही सुविधा है:
- 27. "<<<" ऑपरेटर का नाम क्या है?
- 28. सी में शाब्दिक चरित्र: क्या यह एक int या char है?</p> <pre><code>int i = 0 + 'A'; </code></pre> <p><code>'A'</code><code>char</code> या <code>int</code> माना जाता है:
- 29. अधिभार ऑपरेटर << सरणी के लिए
- 30. /// <संदर्भ पथ = "jquery-1.8.3.js" /> वास्तव में क्या करता है?
यह वैध कोड है और जब तक आप किसी उद्देश्य के लिए अनियमित चर का उपभोग करने के बजाय कुछ मूल्य के साथ 'x' प्रारंभ करते हैं, तब तक सुरक्षित है। बेहतर चीज 'int और x = * नई int()' होगी जो इसे शून्य मूल्य के साथ भी आरंभ करेगी। और आवंटित स्मृति को हटाने के लिए आप चाहते हैं। – Arunmu
मुझे नहीं लगता कि यह 'int y से अलग है; int और x = y; ', जो तब होता है जब आप 'int y करते हैं; std :: cin >> y; ' – dyp