C错误:抛出’std :: bad_alloc’实例后调用终止

我编写了下面粘贴的代码,按照它们的说明顺序执行以下任务:

>读取输入文件并计算其中的条目数
>创建一个适当大小的数组(大小等于条目数)
>返回输入文件的开头并再次阅读
>将条目存储在一个数组中
>打印出文件中的条目数和条目本身.

这是我的代码:

#include <iostream>
#include <fstream>
#include <exception>

using namespace std;

int main(int argc, char* argv[]){

    ifstream inFile(argv[1]); //passing arguments to the main function
    int numEntries;

    if(!inFile){
        cout << "file not found" << endl;
        return 1;
    }

    string entry;
    while (!inFile.eof()){ //counting the number of entries
        getline(inFile,entry);
        ++numEntries;
    }

    const int length = numEntries;  //making an array of appropriate length
    int*arr = new int[length];

    inFile.clear();             //going back to the beginning of the file
    inFile.seekg(0, ios::beg);

    int i = 0;
    const int size = numEntries;    //making an array to store the entries in the file
    int matrix[size];
    int pos = 0;

    int variable = 0;
    while(pos < size){
        inFile >> variable;
        matrix[pos] = variable;
        ++pos;
    }
    cout<< numEntries << "entries have been read"<< endl; 
    inFile.close();
    for(int i = 0; i < pos; ++i)
        cout << matrix[i] << endl; //printing out the entries
    return 0;
}

当我执行.cpp文件时,我不断收到错误消息:

terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted (core dumped)

我已经收集了这与内存不足或变量从main()函数中脱落有关,但我无法弄清楚如何在这种特定情况下解决问题.如果它是相关的,我正在Linux计算机上工作.

最佳答案 这段代码有3个洞:

第一洞:int numEntries.稍后你会做:numEntries;

您增加未指定的值.不确定它是否是UB,但仍然很糟糕.

第二洞和第三洞:

const int length = numEntries;
int* arr = new int[length];

const int size = numEntries;
int matrix[size];

numEntries具有未指定的值(第一个孔).您可以使用它来初始化长度和大小 – 即未定义的行为.但是我们假设它只是一些大数字 – 你分配了未指定大小的内存(可能只是非常大的大小),因此std :: bad_alloc异常 – 它意味着你想分配更多你可用的内存.

此外,矩阵是未指定大小的VLA,它既是非标准行为又是未定义行为.

点赞