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中删除任何项或写入,所以结果将是一个向量,每个元素中都包含相同的项。