[英]std::bad_alloc error in C++ vector in merge sort
我試圖在c ++中使用向量實現合並排序,我得到以下錯誤 - 在拋出'std :: bad_alloc'的實例后調用terminate。 bad_alloc還有其他解決方案,但沒有幫助。
問題是合並功能 -
#include<iostream>
#include<vector>
using namespace std;
void print(vector<int> v)
{
for(int i=0; i<v.size(); i++)
cout << v[i] << " ";
cout << endl;
}
vector<int> merging(vector<int> left, vector<int> right)
{
vector<int> result;
while((int)left.size()>0 && (int)right.size()>0)
{
if((int)left.front()<=(int)right.front()){
result.push_back(left.front());
//left.erase(left.begin());
}
else{
result.push_back(right.front());
//left.erase(right.begin());
}
}
while((int)left.size()>0){
for(int j=0; j<(int)left.size(); j++)
result.push_back(left[j]);
}
while((int)right.size()>0){
for(int k=0; k<(int)right.size(); k++)
result.push_back(right[k]);
}
cout << "check merging";
return result;
}
int main()
{
vector<int> a, b, result;
a.push_back(38);
a.push_back(27);
b.push_back(43);
b.push_back(3);
cout << a.front() << endl;
print(a);
cout << endl;
print(b);
cout << endl;
result = merging(a, b);
print(result);
}
謝謝
從std::bad_alloc
上的頁面
當operator new和operator new []的標准定義未能分配所請求的存儲空間時拋出的異常類型。
你的內存不足,當你不能再分配時會拋出異常。
嘗試查看循環的退出條件。
while((int)left.size()>0 && (int)right.size()>0)
在left
和right
都為空之前,此循環不會退出,但是您永遠不會更改它們的大小( erase
調用已被注釋掉)。
另外兩個while循環有類似的問題。
第一個while循環永遠不會終止。 它會不斷向結果中添加元素,直到內存耗盡為止。
你的代碼還有其他問題:在left.front()<= right.front的情況下你永遠不會刪除你從左邊放入的元素,它會被注釋掉。 在那個其他地方,你也不會從right
移除。 注釋掉的代碼將從left
移除,將right
的迭代器混合到left
的擦除中,技術上稱為“未定義的行為”意味着您的程序是吐司。
另外,為什么你到處都是int? 那太沒用了
即使你要從左前方和右前方擦除,你也可以使用向量從前面移除,這些操作不是由向量有效支持的。 有沒有需要做的是,你可以遍歷left
和right
使用迭代器,而不是檢查他們是否是空的左迭代器是否達到結束left
以及是否正確到達迭代的末尾right
你有一個無限循環。
while((int)left.size()>0 && (int)right.size()>0)
{
if((int)left.front()<=(int)right.front()){
result.push_back(left.front());
//left.erase(left.begin());
}
else{
result.push_back(right.front());
//left.erase(right.begin());
}
}
永遠不會結束,因為你永遠不會從left
刪除任何元素
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.