यह सुंदर दूर की कौड़ी है, लेकिन निम्न कोड "सुरक्षित" (यानी विभाजन गलती पैदा करने के लिए नहीं की गारंटी) है:std :: vector :: आरक्षित सुरक्षित के बाद कच्चे सूचक का उपयोग कर रहा है?
std::vector<int> vec(1); // Ensures that &vec[0] is valid
vec.reserve(100);
memset(&vec[0], 0x123, sizeof(int)*100); // Safe?
मुझे लगता है कि यह बदसूरत है - मैं अगर यह तकनीकी रूप से सुरक्षित है पता करने के लिए केवल इच्छुक हूँ , सुंदर नहीं"। मुझे लगता है कि इसका एकमात्र उपयोग किसी दिए गए इंडेक्स से अधिक मूल्यों को अनदेखा कर सकता है।
नोट! How can I get the address of the buffer allocated by vector::reserve()? एक ही विषय को शामिल करता है, लेकिन मुझे अधिक दिलचस्पी है यदि यह सुरक्षित है और यदि ऐसा करने में समस्याएं हैं।
संपादित करें: मूल कोड गलत था, को memset
के साथ बदल दिया गया।
ठीक है, यह इतना बदसूरत है कि यह दर्द होता है। तुम वो क्यों कर रहे हो? यदि आपको वास्तव में करना है, तो क्या आप बस सरणी का उपयोग नहीं कर सकते? इस उदाहरण में 100 निश्चित है, इसलिए आप स्टैक पर एक सरणी का उपयोग किए बिना [] ing ... – Francesco
"सेगमेंटेशन गलती" एक मंच-विशिष्ट घटना है। सी ++ भाषा यह वर्णन नहीं करती है कि यह क्या है। भाषा केवल यही कहती है कि कुछ परिभाषित किया गया है, और यदि ऐसा है, तो क्या करें। –
मैंने सवाल कम कर दिया है, न कि क्योंकि मैं इसे एक बुरा सवाल मानता हूं, लेकिन क्योंकि आपने यह सुनिश्चित करने के लिए पर्याप्त समय नहीं लगाया कि आप जो पूछ रहे थे वह था जो आप पूछना चाहते थे (मूल कोड और वर्तमान संस्करण में कोड काफी है विभिन्न)।-2 प्रतिनिधि अंक ज्यादा नहीं हैं, लेकिन आपको भविष्य में थोड़ा और सावधान रहने के लिए याद दिलाना चाहिए, क्योंकि जब आप अन्य लोगों से मदद करने के लिए उत्तर देने का समय लेते हैं, और यह वह समय है जो बाद में प्रश्न को सुधारने पर बर्बाद हो जाता है पर। –