mergesort -std :: bad_allocがベクトルを割り当てようとするときにスローされた
質問
こんにちは、女性と紳士。ですから、エラーのための私の日ではありません。 C ++でMergESORT(インプレースではない)を実装していますが、その理由はわかりませんが、コードに本当に問題があります。次の2行目 mergeSort()
関数はの結果を割り当てます merge()
intsのベクトルに、 result
. 。この行(関数ではなく実際の割り当て)がスローします bad_alloc
エラー、そして私は理由がわかりません。
インターネットはそれを示唆しています bad_alloc
メモリ外のエラーのために主に投げられますが、これは500 INTのベクトルに初めて呼ばれるのが当てはまることはありません。 32ビットint?)。 C ++に対して愚かで間違っていることをしていると思いますが、何がわかりません。電話してみました what()
例外については、それはその名前を返すだけです。コード:
vector<int> Sorting::mergeSort(vector<int> A) {
// If the length of A is 0 or 1, it is sorted.
if(A.size() < 2) return A;
// Find the mid-point of the list.
int midpoint = A.size() / 2;
// Declare the left/right vectors.
vector<int> left, right;
// Declare the return vector.
vector<int> result (A.size());
for(int i = 0; i < midpoint; ++i) {
left.push_back(A.at(i));
}
for(int i = midpoint; i < A.size(); ++i) {
right.push_back(A.at(i));
}
left = mergeSort(left);
right = mergeSort(right);
result = merge(left, right);
return result;
}
vector<int> merge(vector<int> left, vector<int> right) {
vector<int> result;
while(left.size() > 0 && right.size() > 0) {
if(left.front() <= right.front()) {
result.push_back(left.front());
left.erase(left.begin());
} else {
result.push_back(right.front());
right.erase(right.begin());
}
}
if(left.size() > 0) {
for(int i = 0; i < left.size(); ++i) {
result.push_back(left.at(i));
}
} else {
for(int i = 0; i < right.size(); ++i) {
result.push_back(right.at(i));
}
}
}
書き直した場合 merge
参照するだけで機能します result
関数中に編集すると正常に動作しますが、Merge-Sortに与えられた「標準」Psuedoコードにできるだけ近いコードを保持したいと思いました。
助けてくれてありがとう、ありがとう。
解決
の中に Merge
関数、 vector<int> result
返されていません。
所属していません StackOverflow