निम्नलिखित कार्यक्रम दुर्घटनाओं:विभाजन गलती जब segmention गलती के साथ आगे बढ़ std :: वेक्टर
#include <iostream>
#include <vector>
using namespace std;
struct data
{
data() : a(random()), b(random()), v({random(), random(), random()}) {}
data(data&& m) noexcept : a(m.a), b(m.b), v(std::move(m.v)) { }
long int a;
long int b;
std::vector<long int> v;
};
data&& randomize()
{
srandom(time(0));
data d;
d.a = random();
return std::move(d);
}
int main(int argc, char** argv)
{
data d = randomize();
cout << d.a << " " << d.b << endl;
return 0;
}
कोड जी ++ संस्करण 4.7.2 (Debian 4.7.2-5) के साथ संकलित किया गया है:
g++ -std=c++11 -g test.cpp
मैं क्या गलत कर रहा हूँ? समस्या std :: वेक्टर चालक कन्स्ट्रक्टर में प्रतीत होती है, क्योंकि सबकुछ इसके बिना ठीक काम करता है। ऐसा लगता है कि फ़ंक्शन समाप्त होने पर यादृच्छिक() को नष्ट कर दिया जाता है, लेकिन इसे मुख्य रूप से डेटा ऑब्जेक्ट में स्थानांतरित नहीं किया जाना चाहिए?
ध्यान दें कि यहां * रावल्यू * संदर्भ वापस करने की आवश्यकता नहीं है (भले ही यह स्थानीय स्वचालित चर के संदर्भ को वापस करने के लिए मान्य हो)। यदि संभव हो तो फ़ंक्शन रिटर्न मान हमेशा स्थानांतरित हो जाते हैं। –