मैं दो कोड के ब्लॉक के बारे में new[]
और delete[]
है:पी = नई स्ट्रिंग [0] और पी = नई int [0] के बाद, स्ट्रिंग संस्करण क्रैश होने पर क्रैश क्यों होता है [] p?
1))
#include <string>
int main()
{
std::string *p = new std::string[0];
delete[] p;
return 0;
}
2 इस मामले में, मैं केवल बदल std::string
int
int main()
{
int *p = new int[0];
delete[] p;
return 0;
}
मेरे सवाल यह है:
क्यों निम्न संदेश के साथ पहला कार्यक्रम दुर्घटनाओं (linux वातावरण में):
Segmentation fault (core dumped)
लेकिन दूसरे कार्यक्रम किसी भी त्रुटि के बिना अच्छी तरह से काम करता है?
संपादित
संकलक: g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
मैं सिर्फ g++
किसी भी तर्क के बिना उपयोग करने के लिए यह संकलन करने।
यदि यह एक कंपाइलर बग है, तो क्या उन्हें मानक के अनुसार क्रैश करना चाहिए या नहीं?
एक संकलक बग – Andrey
यह यहाँ क्रैश नहीं होता की तरह लग रहा। आप किस कंपाइलर का उपयोग कर रहे हैं (सटीक संस्करण के साथ) और आप इसे कैसे संकलित कर रहे हैं? – amaurea
जी ++ (4.7 और 4.8) के साथ क्रैश, क्लैंग के साथ क्रैश नहीं होता है। मुझे लगता है कि यह एक जी ++ बग है। – kennytm