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;
}
コードをg ++バージョン4.7.2(Debianの4.7.2-5)でコンパイルされている:
g++ -std=c++11 -g test.cpp
私は何が間違っていますか?問題は、std :: vector moveコンストラクタにあるようで、すべてがうまく動作しません。関数が終了するとrandomize()のデータオブジェクトが破棄されるように見えますが、メインオブジェクトのデータオブジェクトに移動するのではなく、
ここで* rvalue *参照を返す必要はありません(ローカル自動変数への参照を返すことが有効であっても)。可能な場合、関数戻り値は常に移動されます。 –