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

时间:2016-01-27 06:51:53

标签: 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++)
            {
                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;
}

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

1 个答案:

答案 0 :(得分:5)

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

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

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

PS: 您也可以选择使用vectors而不是数组,让您的心灵摆脱内存管理问题。