C++ 多个文件的内存分配错误“;在抛出';std::bad#u alloc';什么():std::bad#u alloc”;[C+;+;]

C++ 多个文件的内存分配错误“;在抛出';std::bad#u alloc';什么():std::bad#u alloc”;[C+;+;],c++,memory-management,dynamic-memory-allocation,memory-limit,multiple-file-upload,C++,Memory Management,Dynamic Memory Allocation,Memory Limit,Multiple File Upload,我正在为一个数字语音信号处理项目使用分类器算法。这个算法是为了在单个向量中接收所有音频信号来进行处理而开发的,但是我遇到了问题,因为我正在处理的文件数量非常大,并且正在生成错误“在抛出'std::bad_alloc'what():std::bad_alloc'实例后终止调用”。我想知道是否有可能在不超过可用内存空间的情况下,对读取文件并将其存储在向量中的代码进行任何更改 读取文件的代码: string filename; filename="C:\\Users\\marcu\\

我正在为一个数字语音信号处理项目使用分类器算法。这个算法是为了在单个向量中接收所有音频信号来进行处理而开发的,但是我遇到了问题,因为我正在处理的文件数量非常大,并且正在生成错误“在抛出'std::bad_alloc'what():std::bad_alloc'实例后终止调用”。我想知道是否有可能在不超过可用内存空间的情况下,对读取文件并将其存储在向量中的代码进行任何更改

读取文件的代码:

string filename;
    filename="C:\\Users\\marcu\\Desktop\\TCC\\Arquivos_10780\\Arquivos_DFT_TXT_512\\PA_D_00";

    std::vector<double> c;

    for(int j=1; j<=5400; j++)
    {
        stringstream ss;
        ss << filename << setw(5) << setfill('0') << j << "_bonafide_DFT.txt";

        std::ifstream f;
        f.open(ss.str().c_str());

        if (f.is_open())
        {
            double num;

            while (f >> num)
                c.push_back(num);

            f.close();
        }
        else
        {
            f.close();
            continue;
        }
    }

    for(int j=5401; j<=29700; j++)
    {
        stringstream ss;
        ss << filename << setw(5) << setfill('0') << j << "_spoof_DFT.txt";

        std::ifstream f;
        f.open(ss.str().c_str());

        if (f.is_open())
        {
            double num;

            while (f >> num)
                c.push_back(num);

            f.close();
        }
        else
        {
            f.close();
            continue;
        }
    }
字符串文件名;
filename=“C:\\Users\\marcu\\Desktop\\TCC\\Arquivos\u 10780\\Arquivos\u DFT\u TXT\u 512\\PA\u D\u 00”;
std::向量c;

对于(int j=1;j首先,您有以下许多问题:

double** largest_range_vector_for_class=new double*[number_of_classes];
    for(int i=0; i<number_of_classes; i++)
        largest_range_vector_for_class[i]=new double[dimension_of_each_feature_vector];
    for(int i=0; i<number_of_classes; i++)
        for(int k=0; k<dimension_of_each_feature_vector; k++)
            largest_range_vector_for_class[i][k]=C[i][0][k];
    for(int i=0; i<number_of_classes; i++)
        for(int j=1; j<number_of_feature_vectors_in_class[i]; j++)
            for(int k=0; k<dimension_of_each_feature_vector; k++)
                if(C[i][j][k]>largest_range_vector_for_class[i][k])
                    largest_range_vector_for_class[i][k]=C[i][j][k];
double**;

对于(int i=0;i首先,您有以下许多问题:

double** largest_range_vector_for_class=new double*[number_of_classes];
    for(int i=0; i<number_of_classes; i++)
        largest_range_vector_for_class[i]=new double[dimension_of_each_feature_vector];
    for(int i=0; i<number_of_classes; i++)
        for(int k=0; k<dimension_of_each_feature_vector; k++)
            largest_range_vector_for_class[i][k]=C[i][0][k];
    for(int i=0; i<number_of_classes; i++)
        for(int j=1; j<number_of_feature_vectors_in_class[i]; j++)
            for(int k=0; k<dimension_of_each_feature_vector; k++)
                if(C[i][j][k]>largest_range_vector_for_class[i][k])
                    largest_range_vector_for_class[i][k]=C[i][j][k];
double**;

对于(int i=0;i相关:在现实世界中应该避免。@user4581301这与三星编程有什么关系,我看不到任何动态内存分配之类的???@YunfeiChen向下滚动到
不要更改这一行下面的任何内容!!!!
下一行是以最痛苦的方式完成的3D数组。在这种情况下不过,这可能是合理的,因为它保持了内存块大小的可管理性,though@user4581301我注意到了两件事:首先,看起来他有一个额外的else语句……而且看起来他正在向文件写入数万次,关闭和打开,只是好奇他的pr有多贵Gram准确地说,它看起来会使一个系统崩溃??或者需要一段时间。@user4581301哇,这看起来很难看,你怎么删除这个怪物?在你完成它之后当然……不相关:在现实世界中应该避免。@user4581301这与三星编程有什么关系,我看不到任何动态内存分配或者像这样的???@YunfeiChen向下滚动到
不要更改这一行下面的任何内容!!!!
下一行是一个3D数组,这可能是最痛苦的方式。在这种情况下,这可能是合理的,因为它保持了内存块的大小可管理。像筛子一样泄漏,though@user4581301我注意到两件事:首先看起来他有一个额外的else语句…而且看起来他正在向文件写入成千上万次,关闭和打开,只是好奇他的程序到底有多贵,看起来它会使系统崩溃??或者需要一段时间…@user4581301哇,看起来很难看,你怎么在完成后删除那个怪物当然有了它。。。