C++ の (非常に限られた) 知識を更新し、マージ検索メソッドを実装しようとしています。
class Sorter
{
protected:
vector<int> v;
public:
Sorter(){};
Sorter(vector<int> input_vector);
virtual void sort() = 0;
};
Sorter::Sorter(vector<int> input_vector)
{
v.assign(input_vector.begin(), input_vector.end());
}
class MergeSorter : public Sorter
{
public:
MergeSorter():Sorter(){};
MergeSorter(vector<int> input_vector):Sorter(input_vector){};
vector<int> sorted_v;
MergeSorter* left;
MergeSorter* right;
void merge();
void sort();
};
void MergeSorter::sort()
{
if(v.size() <= 1)
return;
int mid = int(v.size() / 2);
left->v.assign(v.begin(), v.begin() + mid);
right->v.assign(v.begin() + mid, v.end() + 1);
left->sort();
right->sort();
left->v.assign(left->sorted_v.begin(), left->sorted_v.end());
right->v.assign(right->sorted_v.begin(), right->sorted_v.end());
merge();
return;
}
...
コンパイルはしますが、に何かを割り当てようとすると、「アクセス違反の読み取り場所」でプログラムがクラッシュしleft->v
ます。left
最初に実際にオブジェクト(および)を作成する必要があると感じていright
ますが、同じクラスのオブジェクトであるため、どこでそれを行うのかわかりません。