C++ 为什么在抛出';std::错误分配';?
每1秒,该功能就会工作。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++)
我的系统是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。当一个新的分配请求的(连续的)内存量失败时,将抛出它。如果您没有捕获异常,则进程将终止。