std::C+中的错误分配错误+;合并排序中的向量 我尝试用C++实现向量的合并排序,我得到以下错误 在抛出“std::bad_alloc”实例后调用terminate。 对于bad_alloc还有其他的解决方案,但没有任何帮助
问题是合并函数-std::C+中的错误分配错误+;合并排序中的向量 我尝试用C++实现向量的合并排序,我得到以下错误 在抛出“std::bad_alloc”实例后调用terminate。 对于bad_alloc还有其他的解决方案,但没有任何帮助,c++,vector,C++,Vector,问题是合并函数- #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
#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;
无效打印(矢量v)
{
对于(int i=0;i,从
operator new和operator new[]的标准定义未能分配请求的存储空间时引发的异常类型
内存不足,无法再分配时会引发异常
尝试查看循环的退出条件
while((int)left.size()>0 && (int)right.size()>0)
除非left
和right
都为空,否则此循环不会退出,但是您永远不会更改它们的大小(erase
调用被注释掉)
其他两个while循环也有类似的问题。第一个while循环从不终止。它不断向结果添加元素,直到内存耗尽
您的代码还存在其他问题:
对于left.front()的情况,您有一个无限循环
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&&(int)right.size()>0)
{
如果((int)left.front()在merging()中,您看起来是在一个无限循环中(实际上有几个无限循环)。那么,一个一直插入直到虚拟内存耗尽的循环。顺便说一句,由于您没有从left中删除任何项或写入,所以结果将是一个向量,每个元素中都包含相同的项。