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

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

每 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]。作为general rule,每次使用new[],就应该使用delete[]

P.S.: 你也可以选择 vectors 而不是数组,这样你就可以从内存管理问题中解脱出来。