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

OMG_Soruce

每隔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():what std :: bad_alloc的实例之后调用message↓终止

克里斯多夫

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

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

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

PS:您也可以选择向量而不是数组,从而使您摆脱内存管理问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章