मेरी समस्या के कम से कम उदाहरण है कि मैं के साथ आया था लौटने के बाद इस प्रकार है के रूप में:विभाजन गलती एक गठबंधन संरचना
struct __attribute__((aligned(16))) Foo {
float x, y, z;
Foo(float x, float y, float z) : x(x), y(y), z(z) {}
};
class Bar {
public:
Foo foo;
Bar(const Foo &foo) : foo(foo) {}
Foo bar() { return foo; }
};
int main()
{
Bar *bar = new Bar(Foo(0.0f, 0.0f, 0.0f));
bar->bar();
return 0;
}
जब चलाते हैं clang++
(संस्करण 3.4 के साथ संकलित विभाजन गलती में कोड परिणामों का यह टुकड़ा, उबंटू 14.04 में उपलब्ध डिफ़ॉल्ट)। समस्या तब नहीं होती जब मैं g++
(संस्करण 4.8.4) के साथ संकलित करता हूं। क्या यह एक कंपाइलर बग है या क्या मेरे कोड में कुछ समस्या है?
एक तरफ ध्यान दें के रूप में: अगर bar
स्टैक-आवंटित किया जाता है कार्यक्रम क्रैश नहीं होता, यानी .:
Bar bar(Foo(0.0f, 0.0f, 0.0f));
bar.bar();
काम करता है के रूप में इरादा।
यदि आप बार हटाते हैं तो इससे कोई फर्क पड़ता है; बाहर निकलने से पहले? –
@ BarışUşaklı: नहीं। समस्या ठीक है 'वापसी foo;' कथन के साथ। यदि मैं इसे प्रतिस्थापित करता हूं, उदाहरण के लिए, 'वापसी Foo (0.0f, 0.0f, 0.0f);' समस्या समाप्त हो गई है। – mrhania
उचित बग साइट पर बग के रूप में इसे बढ़ाएं? यह एक बग रिपोर्टिंग स्थल नहीं है। –