C++ 为什么在抛出';std::错误分配';?

C++ 为什么在抛出';std::错误分配';?,c++,qt,memory,alloc,C++,Qt,Memory,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++)

每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;
}
----全局-------
静态int arrayNum[33000];
-------------------
函数(){
无符号短整数**US\u整数;
US_INT=新的无符号短INT*[255];
对于(int i=0;i<255;i++)
{
US_INT[i]=新的无符号短INT[128];
memset(US_INT[i],0,sizeof(unsigned short INT)*128);
}
双x;
双y;
int-cnt=0;
int nArrayCount=0;
对于(int i=0;i<255;i++)
{
对于(int j=0;j异常是由内存分配中的故障触发的(因此您的
new
)。
terminate()
会自动调用,因为您没有捕获此异常

错误分配的根本原因是您没有足够的内存(或者空闲存储已损坏)。例如,如果您在某些循环中再次无法释放内存,则可能会发生这种情况

事实上,在您的代码中,似乎没有正确删除数组
US\u INT[i]
。您必须使用
delete[]US\u INT[i]
。因此,每次使用
new[]
,您都应该使用
delete[]


p.S.:您也可以选择代替数组,并将您的大脑从内存管理问题中解放出来。

应该删除[]US_INT[i]bad_alloc。当一个新的分配请求的(连续的)内存量失败时,将抛出它。如果您没有捕获异常,则进程将终止。