c++ - 为什么在抛出 'std::bad_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++)
            {
                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[]

附注:您也可以选择 vectors而不是数组,让您从内存管理问题中解脱出来。

关于c++ - 为什么在抛出 'std::bad_alloc' 实例后调用终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35030564/

相关文章:

c++ - 在父类型声明中使用子类型

c++ - Boost multiprecision 失败,因为 complex 的实现试图在 _Isinf 或 _Isnan 等内部函数中转换为 double

qt - 为什么我不能在 Qt 中使用 OpenGL ES 3.0?

c++ - Gzip 内存压缩

linux - do_mmap_pgoff 用于其他进程

c++ - 如何检测 Qt5 中的 QObject::moveToThread() 失败?

c++ - 我应该使用哪种 DLL(或 .lib 或类)

c++ - Qt 中的 "no matching function to call"错误

c++ - Qt线程同步设计

c - 内存分配 : Why this C program works?