почему прерывание вызывается после создания экземпляра ‘std :: bad_alloc’?

Каждую 1 секунду функция работает.
моя система линукс.
Беги внезапно умирает.

    -----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

3

Решение

bad_alloc исключение вызвано сбоем в распределении памяти (поэтому один из ваших new). terminate() вызывается автоматически, потому что вы не поймаете это исключение.

Основная причина bad_alloc в том, что у вас недостаточно памяти (или свободное хранилище повреждено). Это может произойти, например, если вам не удастся освободить память в некоторых циклах.

На самом деле, в вашем коде кажется, что вы неправильно удаляете массивы US_INT[i] , Вы должны использовать delete[]US_INT[i], Как главное правило, каждый раз, когда вы используете new[], вы должны использовать delete[],

P.S .: Вы также можете выбрать векторы вместо массивов и освободить свой ум от проблем с памятью.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]