为什么要在抛出"std::bad_alloc"实例后终止调用?

why terminate called after throwing an instance of 'std::bad_alloc'?

本文关键字:实例 alloc 终止 调用 bad std 为什么      更新时间:2023-10-16

每 1 秒,函数工作一次。
我的系统是Linux。跑步突然死亡。

    -----global-------
    static int arrayNum[33000];
    -------------------
function(){
    unsigned short int**  US_INT;
    US_INT= new unsigned short int*[255];
            for(int i = 0; i < 255; i++)
            {
                US_INT[i] = new unsigned short int[128];
                memset(US_INT[i], 0, sizeof(unsigned short int) * 128);
            }
    double x;
    double y;
    int cnt= 0;  
            int nArrayCount=0;
          for(int i = 0; i < 255; i++)
            {
                for(int j=0;j<128;j++){
                    x=j;
    y=cnt
                    nArray[nArrayCount]=US_INT[i][j];
                    nArrayCount++;
                }
                cnt=cnt+(256/255); 
            }

     for(int i = 0; i < 255; i++)
            {
                delete US_INT[i];
            }
            delete[] US_INT;
}

程序停止。 和消息↓在抛出 'std::bad_alloc' 的实例后终止调用 what(): std::bad_alloc

bad_alloc异常是由

内存分配失败触发的(因此您的new之一)。 将自动调用terminate(),因为您没有捕获此异常。

bad_alloc的根本原因是您没有足够的内存(或免费存储已损坏)。例如,如果您在某些循环中无法释放内存,则可能会发生这种情况。

实际上,在您的代码中,您似乎没有正确删除数组US_INT[i]。 您必须使用 delete[]US_INT[i] . 作为一般规则,每次使用new[]时,都应使用delete[]

PS:你也可以选择向量而不是数组,让你的思想从记忆管理问题中解放出来。